JWT的最佳HTTP授权标题types

我想知道什么是JWT令牌的最佳适当的Authorization HTTP头types。

Basic可能是最受欢迎的types之一。 例如:

 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

它处理两个参数,如login名和密码。 所以这与JWT令牌无关。

另外,我听说了无线承载types,例如:

 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

但是,我不知道它的意思。 这与熊有关吗?

在HTTP Authorization标头中是否有一种特殊的方式来使用JWT令牌? 我们应该使用Bearer ,还是应该简化和使用:

 Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

谢谢。

编辑:

或者,也许只是一个JWT HTTP头:

 JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

JWT令牌可以在没有OAuth的情况下使用。

因此,一个简单的"Authorization: JWT <your_token>"会更合适。

例:

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

您的客户端发送访问令牌(JWT或任何其他令牌)的最佳HTTP标头是带有Bearerauthenticationscheme的Authorization标头。

该scheme由RFC6750进行描述。

例:

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

如果您需要更强大的安全保护,您也可以考虑以下IETF草案: https : //tools.ietf.org/html/draft-ietf-oauth-pop-architecture 。 这个草案似乎是(弃用的) https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac的一个很好的select。;

请注意,即使此RFC和上述规范与OAuth2 Framework协议相关,它们也可以用于任何需要在客户端和服务器之间交换令牌的上下文。

与您在问题中提到的自定义JWT计划不同, Bearer是在IANA注册的 。

关于“ BasicDigest身份validationscheme,它们专用于使用用户名和密码进行身份validation(请参阅RFC7616和RFC7617 ),因此在该上下文中不适用。

这与熊有关吗?

错了…不!

以下是根据RFC 6750的承载令牌的定义:

1.2。 术语

无记名令牌

带有财产的安全令牌,拥有令牌的任何一方(“持有人”)可以以任何拥有该令牌的方式使用该令牌。 使用不记名令牌不需要携带者certificate拥有encryption密钥材料(拥有certificate)。

Bearerscheme最初是在RFC 6750中为OAuth 2.0授权框架定义的,但是没有什么能阻止您在不使用OAuth 2.0的应用中使用Bearerscheme来访问令牌。

尽可能地坚持标准,不要创build自己的authenticationscheme。


访问令牌必须使用Bearerauthenticationscheme在Authorization请求头中发送:

2.1。 授权请求标题字段

当在由HTTP / 1.1定义的Authorization请求头字段中发送访问令牌时,客户端使用Bearerauthenticationscheme来发送访问令牌。

例如:

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

[…]

客户端应该使用带有Bearer HTTP授权scheme的Authorization请求头域来使用不记名令牌进行authentication请求。 […]

在令牌无效或缺失的情况下, Bearerscheme应包含在WWW-Authenticate响应头中:

3. WWW身份validation响应头字段

如果受保护的资源请求不包含authentication凭证,或者不包含访问令牌以启用对受保护资源的访问,则资源服务器必须包含HTTP WWW-Authenticate响应头字段[…]。

本规范定义的所有挑战必须使用auth-scheme值Bearer 。 这个scheme必须跟随一个或多个authentication参数值。 […]。

例如,为了响应没有authentication的受保护的资源请求:

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

为了响应使用过期访问令牌进行authentication尝试的受保护资源请求,请执行以下操作:

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