我想知道JWT令牌最合适的授权HTTP头类型是什么。
最受欢迎的类型之一可能是Basic。例如:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
它处理两个参数,如登录名和密码。所以它与JWT令牌无关。
此外,我还听说过承载型,例如:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
然而,我不知道它的意思。它和熊有关吗?
在HTTP授权报头中使用JWT令牌有特殊的方法吗?我们是应该使用承载者,还是应该简化使用:
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
谢谢。
编辑:
或者,只是一个JWT HTTP报头:
JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
客户端发送访问令牌(JWT或任何其他令牌)的最佳HTTP报头是带有承载身份验证方案的授权报头。
RFC6750描述了该方案。
例子:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9TJV...r7E20RMHrHDcEfxjoYZgeFONFh7HgQ
如果您需要更强的安全保护,您也可以考虑以下IETF草案:https://datatracker.ietf.org/doc/html/draft-ietf-oauth-pop-architecture。这个草案似乎是一个很好的替代(放弃?)https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac。
请注意,即使此RFC和上述规范与OAuth2框架协议相关,它们也可以用于任何其他需要在客户机和服务器之间进行令牌交换的上下文中。
与您在问题中提到的自定义JWT计划不同,持名者计划在IANA注册。
关于基本和摘要身份验证方案,它们专门用于使用用户名和秘密进行身份验证(请参阅RFC7616和RFC7617),因此不适用于该上下文中。
简短的回答
您正在寻找的是承载身份验证方案。
长回答
它和熊有关吗?
Errr ...No:)
根据《牛津词典》,这个词的定义如下:
不记名/ˈbɛːrə/
名词
承载物:携带或持有某物的人或物
付款人:出示支票或其他付款命令的人
第一个定义包括以下同义词:信使,代理人,传送带,使者,承运人,提供者。
下面是根据RFC 6750对不记名令牌的定义:
1.2. 术语
不记名的令牌
一种安全令牌,其属性是拥有令牌的任何一方(“持有者”)都可以以任何其他拥有令牌的一方可以使用的方式使用该令牌。使用不记名令牌并不要求记名者证明拥有加密密钥材料(持有证明)。
承载身份验证方案在IANA中注册,最初是在RFC 6750中为OAuth 2.0授权框架定义的,但是没有什么可以阻止您在不使用OAuth 2.0的应用程序中使用承载身份验证方案作为访问令牌。
尽可能地遵守标准,不要创建自己的身份验证方案。
访问令牌必须使用承载认证方案在授权请求头中发送:
2.1. 授权请求报头字段
客户端在HTTP/1.1定义的授权请求报头字段中发送访问令牌时,使用承载认证方案来传输访问令牌。
例如:
GET /资源HTTP/1.1
主持人:server.example.com
授权:持有人mF_9.B5f-4.1JqM
[…]
客户端应该使用承载HTTP授权方案的授权请求报头字段,使用承载令牌发出经过身份验证的请求。[…]
在无效或缺失令牌的情况下,承载方案应该包括在WWW-Authenticate响应头中:
3. The WWW-Authenticate Response Header Field
If the protected resource request does not include authentication credentials or does not contain an access token that enables access to the protected resource, the resource server MUST include the HTTP WWW-Authenticate response header field [...].
All challenges defined by this specification MUST use the auth-scheme value Bearer. This scheme MUST be followed by one or more auth-param values. [...].
For example, in response to a protected resource request without authentication:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"
And in response to a protected resource request with an authentication attempt using an expired access token:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
error="invalid_token",
error_description="The access token expired"
客户端发送访问令牌(JWT或任何其他令牌)的最佳HTTP报头是带有承载身份验证方案的授权报头。
RFC6750描述了该方案。
例子:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9TJV...r7E20RMHrHDcEfxjoYZgeFONFh7HgQ
如果您需要更强的安全保护,您也可以考虑以下IETF草案:https://datatracker.ietf.org/doc/html/draft-ietf-oauth-pop-architecture。这个草案似乎是一个很好的替代(放弃?)https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac。
请注意,即使此RFC和上述规范与OAuth2框架协议相关,它们也可以用于任何其他需要在客户机和服务器之间进行令牌交换的上下文中。
与您在问题中提到的自定义JWT计划不同,持名者计划在IANA注册。
关于基本和摘要身份验证方案,它们专门用于使用用户名和秘密进行身份验证(请参阅RFC7616和RFC7617),因此不适用于该上下文中。