Jenis header Otorisasi HTTP Terbaik untuk JWT

228

Saya bertanya-tanya apa Authorizationjenis header HTTP terbaik yang sesuai untuk token JWT .

Salah satu jenis yang mungkin paling populer adalah Basic. Misalnya:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Ini menangani dua parameter seperti login dan kata sandi. Jadi tidak relevan untuk token JWT.

Juga, saya mendengar tentang tipe Bearer , misalnya:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Namun, saya tidak tahu artinya. Apakah ini terkait dengan beruang?

Apakah ada cara tertentu untuk menggunakan token JWT di Authorizationheader HTTP ? Haruskah kita menggunakan Bearer, atau haruskah kita menyederhanakan dan hanya menggunakan:

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Terima kasih.

Edit:

Atau mungkin, hanya JWTtajuk HTTP:

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Zag zag ..
sumber

Jawaban:

295

Header HTTP terbaik untuk klien Anda untuk mengirim token akses (JWT atau token lainnya) adalah Authorizationheader dengan Bearerskema otentikasi.

Skema ini dijelaskan oleh RFC6750 .

Contoh:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9TJV...r7E20RMHrHDcEfxjoYZgeFONFh7HgQ

Jika Anda membutuhkan perlindungan keamanan yang lebih kuat, Anda juga dapat mempertimbangkan konsep IETF berikut: https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture . Draf ini tampaknya menjadi alternatif yang baik untuk (ditinggalkan?) Https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac .

Perhatikan bahwa meskipun RFC ini dan spesifikasi di atas terkait dengan protokol Kerangka OAuth2, mereka dapat digunakan dalam konteks lain yang membutuhkan pertukaran token antara klien dan server.

Tidak seperti JWTskema khusus yang Anda sebutkan dalam pertanyaan Anda, yang Bearerterdaftar di IANA .

Mengenai skema otentikasi Basicdan Digest, mereka didedikasikan untuk otentikasi menggunakan nama pengguna dan rahasia (lihat RFC7616 dan RFC7617 ) sehingga tidak berlaku dalam konteks itu.

Florent Morselli
sumber
3
Terima kasih! Bagus melihat asal Bearerkata kunci ini . Tapi itu berasal dari OAuth. Namun JWT dapat digunakan tanpa OAuth. Ini benar-benar independen dengan spesifikasi OAuth.
Zag zag ..
2
Ya itu berasal dari kerangka kerja kerangka OAuth2, tetapi dapat digunakan dalam konteks lainnya. Server Anda bebas untuk menerima JWT menggunakan tajuk atau cara lain (misalnya dalam permintaan tubuh atau dalam string kueri), tetapi Authenticatetajuk lebih sesuai dan sesuai dengan RFC7235 yang menjelaskan kerangka kerja otentikasi dalam konteks HTTP 1.1
Florent Morselli
1
Saya setuju dengan Zag zag, skema khusus seperti "JWT" ​​tampaknya jauh lebih tepat daripada memaksa skema OAuth2 Bearer dalam hal ini.
15
50
Ini harus menjadi jawaban yang diterima. Mengutip jwt.io/introduction : "agen pengguna harus mengirim JWT, biasanya di header Otorisasi menggunakan skema Bearer. Konten header harus terlihat seperti berikut: Otorisasi: Bearer <token>"
wrschneider
3
Jika itu membantu seseorang - saya datang ke sini mencari contoh ini: - permintaan ikal menggunakan skema Bearer:curl -H "Authorization: Bearer <TOKEN>" <the rest of your curl cmd>
Kevin Friedheim
76

Jawaban singkat

The Bearerskema otentikasi adalah apa yang Anda cari.

Jawaban panjang

Apakah ini terkait dengan beruang?

Errr ... Tidak :)

Menurut Kamus Oxford , berikut ini definisi pembawa :

bearer / ˈbɛːrə /
kata benda

  1. Seseorang atau sesuatu yang membawa atau memegang sesuatu.

  2. Seseorang yang memberikan cek atau perintah lain untuk membayar uang.

Definisi pertama meliputi sinonim berikut: kurir , agen , konveyor , utusan , operator , penyedia .

Dan inilah definisi token pembawa menurut RFC 6750 :

1.2. Terminologi

Token Pembawa

Token keamanan dengan properti yang dimiliki oleh pihak mana pun yang memiliki token ("pembawa") dapat menggunakan token dengan cara apa pun yang dapat dilakukan oleh pihak lain yang memilikinya. Menggunakan token pembawa tidak memerlukan pembawa untuk membuktikan kepemilikan bahan kunci kriptografis (bukti kepemilikan).

The BearerSkema otentikasi yang terdaftar di IANA dan awalnya didefinisikan dalam RFC 6750 untuk kerangka otorisasi OAuth 2.0, tapi tidak ada yang menghentikan Anda dari menggunakan Bearerskema untuk token akses dalam aplikasi yang tidak menggunakan OAuth 2.0.

Tetap berpegang pada standar sebanyak yang Anda bisa dan jangan membuat skema otentikasi Anda sendiri.


Token akses harus dikirim di Authorizationheader permintaan menggunakan Bearerskema otentikasi:

2.1. Bidang Judul Permintaan Otorisasi

Saat mengirim token akses di Authorizationbidang header permintaan yang ditentukan oleh HTTP / 1.1, klien menggunakan Bearerskema otentikasi untuk mengirimkan token akses.

Sebagai contoh:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

[...]

Klien HARUS membuat permintaan terotentikasi dengan token pembawa menggunakan Authorizationbidang header permintaan dengan Bearerskema otorisasi HTTP. [...]

Jika token tidak valid atau hilang, Bearerskema harus dimasukkan dalam WWW-Authenticatetajuk respons:

3. Bidang Header Respons Otentikasi WWW

Jika permintaan sumber daya yang dilindungi tidak termasuk kredensial otentikasi atau tidak mengandung token akses yang memungkinkan akses ke sumber daya yang dilindungi, server sumber daya HARUS menyertakan WWW-Authenticatebidang header respons HTTP [...].

Semua tantangan yang ditentukan oleh spesifikasi ini HARUS menggunakan nilai skema-auth Bearer. Skema ini HARUS diikuti oleh satu atau lebih nilai auth-param. [...]

Misalnya, sebagai tanggapan atas permintaan sumber daya yang dilindungi tanpa otentikasi:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"

Dan sebagai tanggapan atas permintaan sumber daya yang dilindungi dengan upaya otentikasi menggunakan token akses yang kadaluarsa:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                         error="invalid_token",
                         error_description="The access token expired"
cassiomolin
sumber
5
Iya. Ini terkait dengan beruang. Dengan cara yang sama python terkait dengan ular. Duh.
Nicholas Hamilton
4
Beruang .. Itu berhasil. Terima kasih telah membuat hari saya.
user2501323
Apakah ini kerentanan jika: saya memberikan token kepada pengguna, tetapi ketika dia ingin mengirimi saya permintaan, dia harus mengirim token kembali ke badan permintaan? Saya kemudian akan mendapatkannya dari sana dan memvalidasi? Saya tidak benar-benar memiliki pilihan lain, karena cara mereka mengirim permintaan tidak didefinisikan oleh saya, tetapi saya akan tertarik jika itu buruk atau jika ada solusi untuk membuatnya lebih aman.
Daniel Jeney