JWT的最佳HTTP授权标头类型

时间:2015-10-21 17:38:30

标签: http-headers jwt

我想知道JWT tokens最合适的Authorization HTTP标头类型是什么。

最受欢迎的类型之一是Basic。例如:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

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

另外,我听说过 Bearer 类型,例如:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

但是,我不知道它的含义。它与熊有关吗?

在HTTP Authorization标头中是否有使用JWT令牌的特定方法?我们应该使用Bearer,还是应该简化并使用:

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

感谢。

修改

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

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

2 个答案:

答案 0 :(得分:239)

客户端发送访问令牌(JWT或任何其他令牌)的最佳HTTP标头是带有Authorization身份验证方案的Bearer标头。

此方案由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

的一个很好的替代方案

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

与您在问题中提到的自定义JWT计划不同,the Bearer one is registered at the IANA

关于BasicDigest身份验证方案,它们专门用于使用用户名和密码进行身份验证(请参阅RFC7616RFC7617),因此不适用于该上下文

答案 1 :(得分:49)

简短回答

您正在寻找Bearer身份验证方案。

答案很长

  

它与熊有关吗?

错误......不:)

根据Oxford Dictionaries,这里是 bearer 的定义:

  

持票人 /bɛːrə/
  名词

     
      
  1. 携带或掌握某物的人或物。

  2.   
  3. 出示支票或其他订单付款的人。

  4.   

第一个定义包括以下同义词: messenger 代理传送带使者运营商提供商

根据RFC 6750,这里是 bearer token 的定义:

  

1.2. Terminology

     

不记名令牌

     

具有属性的安全令牌,即拥有该令牌的任何一方(“持票人”)可以以任何其他拥有该令牌的方式使用该令牌。使用不记名令牌不需要持票人证明拥有加密密钥材料(占有证明)。

Bearer身份验证方案为registered in IANA,最初在RFC 6750中为OAuth 2.0授权框架定义,但没有什么能阻止您使用Bearer方案访问令牌在不使用OAuth 2.0的应用程序中。

尽可能坚持标准,不要创建自己的身份验证方案。

必须使用Bearer身份验证方案在Authorization请求标头中发送访问令牌:

  

2.1. Authorization Request Header Field

     

在HTTP / 1.1定义的Authorization请求头字段中发送访问令牌时,客户端使用Bearer身份验证方案来传输访问令牌。

     

例如:

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

[...]

     

客户端应该使用带有Authorization HTTP授权方案的Bearer请求头字段,使用承载令牌进行经过身份验证的请求。 [...]

如果令牌无效或丢失,Bearer方案应包含在WWW-Authenticate响应标头中:

  

3. The WWW-Authenticate Response Header Field

     

如果受保护资源请求不包含身份验证凭据或不包含允许访问受保护资源的访问令牌,则资源服务器必须包含HTTP WWW-Authenticate响应头字段[...]。 / p>      

本规范定义的所有挑战必须使用auth-scheme值Bearer。该方案必须后跟一个或多个auth-param值。 [...]。

     

例如,响应没有身份验证的受保护资源请求:

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

响应受保护的资源请求,并使用过期的访问令牌进行身份验证尝试:

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