我想知道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
答案 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。
关于Basic
和Digest
身份验证方案,它们专门用于使用用户名和密码进行身份验证(请参阅RFC7616和RFC7617),因此不适用于该上下文
答案 1 :(得分:49)
您正在寻找Bearer
身份验证方案。
它与熊有关吗?
错误......不:)
根据Oxford Dictionaries,这里是 bearer 的定义:
持票人 /bɛːrə/
名词
携带或掌握某物的人或物。
- 醇>
出示支票或其他订单付款的人。
第一个定义包括以下同义词: messenger ,代理,传送带,使者,运营商,提供商。
根据RFC 6750,这里是 bearer token 的定义:
不记名令牌
具有属性的安全令牌,即拥有该令牌的任何一方(“持票人”)可以以任何其他拥有该令牌的方式使用该令牌。使用不记名令牌不需要持票人证明拥有加密密钥材料(占有证明)。
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"