我想知道什么是JWT令牌最合适的Authorization
HTTP头类型。
最流行的一种可能是Basic
。例如:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
处理两个参数,如登录名和密码。因此,它与JWT令牌无关。
我还听说过Bearer类型,例如:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
然而,我不知道它的意思。它和熊有关吗?
是否有一种特殊的方式来使用JWT令牌在HTTP Authorization
头?我们应该使用Bearer
,还是应该简化使用:
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
谢谢。编辑:
或者,只是一个JWT
HTTP头:
JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
客户端发送访问令牌(JWT或任何其他令牌)的最佳HTTP头是Authorization
头与Bearer
身份验证方案。
该方案由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
方案不同,Bearer
方案是在IANA注册的。
关于Basic
和Digest
认证方案,它们专用于使用用户名和秘密进行认证(参见RFC7616和RFC7617),因此不适用于该上下文中。
简短回答
Bearer
认证方案是您正在寻找的。
长回答
它与熊有关吗?
哦…没有:)
根据牛津词典,以下是承载者的定义:
无记名 <子> <一口> /ˈbɛːrə/ 一口> 子>
<名词/em>
携带或容纳某物的人或物。
出示支票或其他付款命令的人。
第一个定义包括以下同义词:信使, 代理人, 传送带, 使者, 承运人, 提供者。
根据RFC 6750这是承载令牌的定义:
1.2。术语
无记名标记
一种证券型令牌,其属性是任何拥有该令牌的一方("持有者")都可以以任何其他拥有该令牌的一方所能以的方式使用该令牌。使用承载令牌不需要承载者证明拥有加密密钥材料(所有权证明)。
Bearer
认证方案在IANA中注册,最初在RFC 6750中为OAuth 2.0授权框架定义,但是没有什么可以阻止您在不使用OAuth 2.0的应用程序中使用Bearer
方案作为访问令牌。
尽量遵守标准,不要创建自己的身份验证方案。
访问令牌必须在Authorization
请求头中使用Bearer
认证方案发送:
2.1。授权请求头字段
客户端发送HTTP/1.1定义的
例如:Authorization
请求头字段中的访问令牌时,使用Bearer
认证方案传输访问令牌。
GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_9.B5f-4.1JqM
[…]
客户端应该使用
Authorization
请求头字段和Bearer
HTTP授权方案使用承载令牌进行身份验证请求。[…]
如果无效或缺少令牌,Bearer
方案应包含在WWW-Authenticate
响应头中:
3。认证响应头字段
如果受保护的资源请求不包含认证凭证或不包含访问令牌,资源服务器必须包含HTTP
WWW-Authenticate
响应头字段[…]。本规范定义的所有挑战必须使用auth-scheme值
Bearer
。该方案必须后跟一个或多个auth参数值。[…].例如,响应一个未经过身份验证的受保护资源请求:
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"