ChatGPT解决这个技术问题 Extra ChatGPT

JWT 的最佳 HTTP 授权标头类型

我想知道最适合 JWT tokensAuthorization 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

C
Community

客户端发送访问令牌(JWT 或任何其他令牌)的最佳 HTTP 标头是具有 Bearer 身份验证方案的 Authorization 标头。

此方案由 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 方案不同,the Bearer one is registered at the IANA

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


谢谢!很高兴看到这个 Bearer 关键字的来源。但它来自 OAuth。但是 JWT 可以在没有 OAuth 的情况下使用。它完全独立于 OAuth 规范。
是的,它来自 OAuth2 框架协议,但可以在任何其他上下文中使用。您的服务器可以使用其他标头或方式(例如在正文请求或查询字符串中)自由接受 JWT,但 Authenticate 标头更合适,并且符合描述 HTTP 1.1 中的身份验证框架的 RFC7235语境
我同意 Zag zag 的观点,像“JWT”这样的自定义方案似乎比强制 OAuth2 Bearer 方案更合适。
这应该是公认的答案。引用 jwt.io/introduction:“用户代理应发送 JWT,通常在 Authorization 标头中使用 Bearer 模式。标头的内容应如下所示:授权:Bearer <token>”
如果它对某人有帮助-我来这里是为了寻找这个示例:-使用 Bearer 方案的 curl 请求:curl -H "Authorization: Bearer <TOKEN>" <the rest of your curl cmd>
C
Community

简短的回答

Bearer 身份验证方案正是您要寻找的。

长答案

跟熊有关系吗?

错误...没有:)

根据 Oxford Dictionariesbearer 的定义如下:

bearer /ˈbɛːrə/ 名词 携带或持有某物的人或物。出示支票或其他命令付款的人。

第一个定义包括以下同义词:使者、代理人、传送者、使者、承运人、提供者。

以下是根据 RFC 6750bearer token 的定义:

1.2.术语 持有者令牌 一种安全令牌,具有任何拥有令牌的一方(“持有者”)可以以任何其他拥有它的一方可以使用的任何方式使用令牌的属性。使用不记名令牌不需要不记名证明拥有加密密钥材料(所有权证明)。

Bearer 身份验证方案是 registered in IANA,最初在 RFC 6750 中为 OAuth 2.0 授权框架定义,但没有什么能阻止您在不使用 OAuth 2.0 的应用程序中使用 Bearer 方案访问令牌。

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

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

2.1。 Authorization Request Header Field 当在 HTTP/1.1 定义的 Authorization 请求头域中发送 access token 时,客户端使用 Bearer 认证方案来传输 access token。例如:GET /resource HTTP/1.1 主机:server.example.com 授权:Bearer mF_9.B5f-4.1JqM [...] 客户端应该使用带有承载 HTTP 授权的 Authorization 请求标头字段使用承载令牌发出经过身份验证的请求方案。 [...]

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

3. WWW-Authenticate 响应头域 如果受保护的资源请求不包含认证凭证或不包含允许访问受保护资源的访问令牌,则资源服务器必须包含 HTTP WWW-Authenticate 响应头域 [.. .]。本规范定义的所有挑战必须使用 auth-scheme 值 Bearer。该方案必须后跟一个或多个 auth-param 值。 [...]。例如,响应未经身份验证的受保护资源请求:HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="example" 并且响应使用过期访问令牌进行身份验证尝试的受保护资源请求:HTTP/1.1 401未经授权的 WWW-Authenticate: Bearer realm="example", error="invalid_token", error_description="访问令牌已过期"


是的。它与熊有关。就像 python 与蛇有关。呃。
熊……就是这样。谢谢你让我开心。
如果:我给用户令牌,但是当他想向我发送请求时,他必须将令牌发回请求正文中,这是否是一个漏洞?然后我会从那里得到它并验证?我真的没有其他选择,因为他们发送请求的方式不是由我定义的,但是如果这有什么不好或者是否有解决方案可以使它更安全,我会很感兴趣。
@DanielJeney 你找到答案了吗
熊。甜菜。太空堡垒卡拉狄加。