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标头是带有Bearer
authenticationscheme的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注册的 。
关于“ Basic
和Digest
身份validationscheme,它们专用于使用用户名和密码进行身份validation(请参阅RFC7616和RFC7617 ),因此在该上下文中不适用。
这与熊有关吗?
错了…不!
以下是根据RFC 6750的承载令牌的定义:
1.2。 术语
无记名令牌
带有财产的安全令牌,拥有令牌的任何一方(“持有人”)可以以任何拥有该令牌的方式使用该令牌。 使用不记名令牌不需要携带者certificate拥有encryption密钥材料(拥有certificate)。
Bearer
scheme最初是在RFC 6750中为OAuth 2.0授权框架定义的,但是没有什么能阻止您在不使用OAuth 2.0的应用中使用Bearer
scheme来访问令牌。
尽可能地坚持标准,不要创build自己的authenticationscheme。
访问令牌必须使用Bearer
authenticationscheme在Authorization
请求头中发送:
2.1。 授权请求标题字段
当在由HTTP / 1.1定义的
Authorization
请求头字段中发送访问令牌时,客户端使用Bearer
authenticationscheme来发送访问令牌。例如:
GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_9.B5f-4.1JqM
[…]
客户端应该使用带有
Bearer
HTTP授权scheme的Authorization
请求头域来使用不记名令牌进行authentication请求。 […]
在令牌无效或缺失的情况下, Bearer
scheme应包含在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"