2015-10-21 15 views
80

Ich frage mich, was ist der beste Authorization HTTP-Header-Typ für JWT tokens.Best HTTP Authorization Header-Typ für JWT

Einer der wahrscheinlich beliebtesten Typen ist Basic. Zum Beispiel:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Es zwei Parameter handhaben wie ein Login und ein Passwort. Es ist also nicht relevant für JWT-Token.

Auch hörte ich von Bearer Typ, zum Beispiel:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

aber ich weiß nicht, seine Bedeutung. Ist es mit Bären verwandt?

Gibt es eine besondere Möglichkeit, JWT-Tokens im Header HTTP Authorization zu verwenden? Sollten wir Bearer, oder sollten wir vereinfachen und einfach verwenden:

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

Dank.

Edit:

Oder vielleicht nur ein JWT HTTP-Header:

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 
+17

Es ist urkomisch :) – Gunhan

+2

Ich glaube, dass kleine Bemerkung über Bären absichtlich war, aber es brachte mich zum Lachen – Rodrigo

+1

@Rodrigo verpasste den Teil über Bären, aber sah den Kommentar und schaute wieder hin. Gab mir ein gutes Lachen. –

Antwort

-18

Ein JWT Token kann ohne OAuth verwendet werden.

So wäre eine einfache "Authorization: JWT <your_token>" besser geeignet.

Beispiel:

curl -H "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" https://api.domain.tld/me/account 
+1

Insbesondere die Verwendung von 'JWT' anstelle von' Bearer' erlaubt Ihnen, zwischen verschiedenen Authentifizierungsmechanismen zu unterscheiden, die Ihr Backend unterstützen kann, indem Sie einfach den Authorization-Header analysieren. – wzr1337

+46

Die JWT-Site selbst sagt, das 'Bearer'-Schema zu verwenden, es ist besser, sich daran zu halten. – Pascal

+4

lol @ die angenommene Antwort mit -14. – Yatrix

149

Die besten HTTP-Header für Ihre Kunden ein Zugriffstoken (JWT oder andere Token) senden sind die Authorization Header mit dem Authentifizierungsschema Bearer.

Dieses Schema wird von der RFC6750 beschrieben.

Beispiel:

GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9...TJVA95OrM7E20RMHrHDcEfxjoYZgeFONFh7HgQ

Wenn Sie eine höhere Sicherheit Schutz benötigen, können Sie auch die folgenden IETF-Entwurf berücksichtigen: https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture. Dieser Entwurf scheint eine gute Alternative zu dem (aufgegebenen?) https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac zu sein.

Beachten Sie, dass selbst wenn dieser RFC und die obigen Spezifikationen mit dem OAuth2 Framework-Protokoll in Verbindung stehen, sie in anderen Kontexten verwendet werden können, die einen Tokenaustausch zwischen einem Client und einem Server erfordern.

Im Gegensatz zu der benutzerdefinierten JWT Schema Sie in Ihrer Frage, the Bearer one is registered at the IANA erwähnen.

bezüglich der Basic und Digest Authentifizierungsschemas, werden sie gewidmet Authentifizierung mit einem Benutzernamen und ein Geheimnis (siehe RFC7616 und RFC7617) so nicht anwendbar in diesem Zusammenhang.

+1

Danke! Es ist gut, den Ursprung dieses 'Bearer'-Schlüsselworts zu sehen. Aber es kommt von OAuth. JWT kann jedoch ohne OAuth verwendet werden. Es ist völlig unabhängig mit OAuth-Spezifikationen. –

+1

Ja, es stammt aus dem OAuth2-Framework-Protokoll, kann aber in jedem anderen Kontext verwendet werden. Ihr Server kann JWT mit anderen Headern oder Methoden (z. B. in der body-Anfrage oder in der Abfrage-Zeichenfolge) akzeptieren, aber der 'Authenticate'-Header ist besser geeignet und entspricht der [RFC7235] (https: //tools.ietf. org/html/rfc7235), die ein Authentifizierungs-Framework in einem HTTP 1.1-Kontext beschreibt. –

+0

Ich stimme Zag Zag zu, ein benutzerdefiniertes Schema wie "JWT" ​​scheint viel geeigneter zu sein, als das OAuth2-Bearer-Schema in dieses zu zwingen. – l8nite

8

Ist es zu Bären zu tun?

Errr ... Nein!

Hier ist die Definition von Bearer Token nach dem RFC 6750:

1.2. Terminology

Bearer Token

Ein Sicherheitstoken mit der Eigenschaft, dass jede Partei in Besitz des Tokens (ein "Träger") kann das Token in irgendeiner Weise verwenden, die eine andere Partei im Besitz davon haben kann. Die Verwendung eines Bearer-Tokens erfordert keinen Träger, um den Besitz von kryptographischem Schlüsselmaterial nachzuweisen (Besitznachweis).

Das Bearer Schema ist in der RFC 6750 für die OAuth 2.0 Ermächtigungsrahmen ursprünglich definiert, aber nichts hindert Sie das Bearer Schema für Zugriffstoken in Anwendungen verwenden, die nicht OAuth 2.0 verwenden Sie.

Halten Sie sich so weit wie möglich an die Standards und erstellen Sie keine eigenen Authentifizierungsschemata.


Ein Zugriffstoken muss in den Authorization Anforderungs-Header gesendet werden, unter Verwendung des Bearer Authentifizierungsschema:

2.1. Authorization Request Header Field

Wenn das Zugriffstoken in dem von HTTP/definiert Authorization Anfrage-Header-Feld zu senden 1.1 verwendet der Client das Authentifizierungsschema Bearer, um das Zugriffstoken zu übertragen.

Zum Beispiel:

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

[...]

Kunden sollten authentifizierte Anforderungen mit einem Träger Token machen mit dem Authorization Request-Header-Feld mit der Bearer HTTP Genehmigungsregelung. [...]

Bei ungültigen oder fehlenden Token, das Bearer System sollte in den WWW-Authenticate Response-Header enthalten sein:

3. The WWW-Authenticate Response Header Field

Wenn die geschützte Ressource Anforderung nicht enthält Authentifizierungsanmeldeinformationen oder enthält kein Zugriffstoken, das den Zugriff auf die geschützte Ressource ermöglicht, der Ressourcenserver MUSS das Antwortfeld HTTP WWW-Authenticate [...] enthalten.

Alle durch diese Spezifikation definierten Anforderungen MÜSSEN den Authentifizierungsschema-Wert Bearer verwenden. Auf dieses Schema müssen ein oder mehrere Auth-Param-Werte folgen. [...].

Zum Beispiel als Reaktion auf eine geschützte Ressource Anforderung ohne Authentifizierung:

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

Und als Antwort auf eine geschützte Ressource-Anforderung mit einem Versuch, die Authentifizierung ein abgelaufenes Zugriffstoken mit:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Bearer realm="example", 
         error="invalid_token", 
         error_description="The access token expired" 
Verwandte Themen