为什么我的授权 Header 不需要 "Bearer"?

Why Doesn't my Authorization Header need "Bearer"?

我目前在两个独立但等效的环境(称为 ENV1ENV2)上使用一组 运行 的应用程序。我一直在使用 OAuth 2.0 进行授权,当我从 OAuth 服务请求访问令牌后收到响应时(我通过 Postman 发出请求),我从 ENV1 ENV2:

据我所知,我相信这个 "token_type": "Bearer" 意味着当我将 access_token 发送到我的应用程序时,我需要这样做:

通过 Authorization header 发送令牌,前缀为“Bearer”。这种方法在 ENV1 上工作正常,但在 ENV2 上请求失败 除非 我发送令牌 单独 没有“不记名”前缀:

如果我发送带有“Bearer”前缀的 Authorization header,我会收到一个 401 Unauthorized 错误作为响应。这是Postman提供的帮助提示(重点是我的):

Similar to 403 Forbidden, but specifically for use when authentication is possible but has failed or not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource.

这里的问题是一个WWW-Authenticateheader字段,它包含“Bearer ”,我认为这是一个“适用于所请求资源的挑战”,因为令牌响应包含 "token_type": "Bearer":


问题:

从你的描述来看,环境似乎并不完全相同。例如。也许 ENV2 在一个网关后面,该网关将 Bearer 前缀添加到 header。或者 ENV2(或网关)上的 API 配置为读取没有前缀的 header。

当 OAuth 服务器 returns 访问令牌时,它会为您提供类型 - bearer 令牌。该类型意味着令牌就是这个 - 不记名令牌 - 而不是 Proof-of-Possession 令牌。当您将不记名令牌发送到 API 时,您无需提供任何其他信息来证明您是令牌的所有者。 (你可以将 bearer 与 DPoP 标准进行比较)

Bearer Token Usage 标准确实要求您在授权 header 中使用前缀 Bearer(如您所指出的),但这并不意味着所有 API 和网关正确实施该标准,或者他们根本使用该标准。

总结一下:

  • 由 gateway/API 决定他们想要授权的格式 header,这与令牌类型(不记名令牌)无关。当他们使用标准时很好,但他们不必这样做。
  • 在您的设置中,如果相同的请求在环境之间的处理方式不同,则环境之间肯定存在某种差异。如果您拥有这些环境,您应该调查不同配置的内容。如果您不拥有它们,您应该联系所有者的支持来解决问题。