JWT的最佳HTTP授权标头类型

Zag*_*g.. 205 http-headers jwt

我想知道什么是JWT令牌最合适的AuthorizationHTTP头类型.

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

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)

它处理两个参数,如登录和密码.因此它与JWT令牌无关.

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

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)

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

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

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:

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

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)

Flo*_*lli 269

客户端发送访问令牌(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你在你的问题提方案,Bearer一个在IANA注册.

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

  • 这应该是公认的答案.引用https://jwt.io/introduction/:"用户代理应该使用Bearer架构发送JWT,通常在Authorization标头中.标题的内容应如下所示:Authorization:Bearer <token>" (44认同)
  • 谢谢!很高兴看到这个'Bearer`关键字的起源.但它来自OAuth.但是,JWT可以在没有OAuth的情况下使用.它与OAuth规范完全独立. (3认同)
  • 如果它可以帮助别人 - 我来到这里寻找这个例子: - 使用承载方案卷曲要求:`卷曲-H"授权:承载<TOKEN>" <你的卷曲CMD休息>` (3认同)
  • 是的它来自OAuth2框架protocole,但可以在任何其他上下文中使用.您的服务器可以使用其他标头或方式(例如在正文请求或查询字符串中)接受JWT,但是`Authenticate`标头更合适并且符合[RFC7235](https://tools.ietf. org/html/rfc7235),它描述了HTTP 1.1上下文中的身份验证框架 (2认同)

cas*_*lin 66

简短的回答

Bearer认证方案是你在找什么.

答案很长

它与熊有关吗?

呃...没有:)

根据牛津词典,这里是持票人的定义:

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

  1. 携带或持有某物的人或物.

  2. 提出支票或其他订单付款的人.

第一个定义包括以下同义词:messenger,agent,conveyor,emissary,carrier,provider.

以下是根据RFC 6750定义的承载令牌:

1.2.术语

持票人令牌

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

Bearer认证方案登记在IANA和最初定义的RFC 6750的的OAuth 2.0授权框架,但没有阻止你使用Bearer的访问令牌方案在不使用OAuth 2.0的应用程序.

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


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

2.1.授权请求标头字段

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

例如:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Run Code Online (Sandbox Code Playgroud)

[...]

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

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

3. WWW-Authenticate响应标头字段

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

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

例如,响应受保护的资源请求而不进行身份验证:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"
Run Code Online (Sandbox Code Playgroud)

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

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                         error="invalid_token",
                         error_description="The access token expired"
Run Code Online (Sandbox Code Playgroud)

  • 是的。它与熊有关。就像蟒蛇与蛇的关系一样。呃。 (13认同)
  • 熊..就这样。谢谢你让我度过了愉快的一天。 (7认同)
  • 熊。甜菜。太空堡垒卡拉狄加。 (5认同)