当前位置: 首页 > 知识库问答 >
问题:

为什么我的授权头不需要“不记名”?

简烨烁
2023-03-14

我目前正在处理一组应用程序,这些应用程序运行在两个独立但等效的环境中(称为ENV1ENV2)。我一直在使用OAuth 2.0进行授权,当我从OAuth服务请求访问令牌后收到响应时(我正在通过Postman进行请求),我会从ENV1ENV2得到如下响应:

据我所知,我相信这个< code >“token _ type”:“Bearer”意味着当我向我的应用程序发送< code>access_token时,我需要这样做:

通过前缀为“Bearer”的Authorization头发送令牌。这种方法在ENV1上运行良好,但在ENV2

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

类似于403 Forbidden,但专门用于可能进行身份验证但身份验证失败或尚未提供身份验证的情况。该响应必须包括WWW-Authenticate报头字段,该字段包含适用于所请求资源的质询。

这里的问题是有一个< code>WWW-Authenticate头字段,它包含“Bearer”,我认为这是一个“适用于所请求资源的质询”,因为令牌响应包含< code >“token _ type”:“Bearer”:

  • 为什么环境之间会有所不同?
  • 这怎么可能?我在 OAuth 2.0 上找到的文档显示,像我尝试发出的请求需要“持有者”前缀。(例如,在此处文档的第 2.1 节中)

共有1个答案

席乐童
2023-03-14

从您的描述来看,环境似乎并不完全相同。例如,也许 ENV2 位于将持有者前缀添加到标头的网关后面。或者,ENV2(或网关)上的 API 配置为读取不带前缀的标头。

当OAuth Server返回访问令牌时,它将为您提供类型-a<code>bearer</code>令牌。这种类型意味着,代币只是一种持有者代币,而不是持有证明代币。当您向API发送承载令牌时,您不必提供任何其他信息来证明您是令牌的所有者。(您可以将承载与DPoP标准进行比较)

持有者令牌使用标准确实要求您在授权标头中使用前缀持有者(如您所指出的),但这并不意味着所有 API 和网关都正确实现了该标准,或者它们根本不使用该标准。

总结一下:

  • 网关/API 决定他们想要授权标头的格式,这与令牌的类型(持有者令牌)无关。当他们使用标准时,这很好,但他们不必这样做。
  • 在您的设置中,如果同一请求在环境之间得到不同的处理,则它们之间必须存在某种差异。如果您拥有环境,则应调查配置不同的内容。如果您不拥有它们,则应联系所有者的支持以解决问题。
 类似资料:
  • 问题内容: 我正在用查询执行ajax请求,想知道为什么我的响应已经是JS对象。 如果我做一个 ‘obj’为null,但是我可以将’response’用作js对象数组。 这不是真正的问题,但是我想了解这种行为。 谢谢 问题答案: 当您进行AJAX调用并指定dataType JSON时,就会发生这种情况jQuery会在响应中为您调用jQuery.parseJSON。实际上,您可以根据数据类型指定要调用

  • 使用oAuth 2.0,在“授权代码”授权授予中,我首先调用“/授权”,获取代码,然后在对“/令牌”的调用中使用该代码来获取访问令牌。 我的问题:为什么这是流?我想这是出于安全原因,但我想不出来。为什么实现是这样的,而不是在第一次调用(“/authorize”)后立即获取访问令牌? 为什么我们需要这个代码?

  • 问题内容: 我们都知道我们需要在React中绑定函数以使其起作用。我知道为什么我们需要绑定它。 但是我不确定为什么我们不需要绑定箭头功能。 示例:使用箭头功能(无需绑定) }; 现在,使用功能(需要绑定) }; 我不是在问为什么我们需要绑定功能。我只想知道为什么箭头功能不需要绑定。 谢谢。 问题答案: 仅仅因为arrow函数的上下文中没有以下内容: 这个 论点 超 新目标 所以,当你引用此箭头功能

  • 本文向大家介绍为什么HTML5里面我们不需要DTD?相关面试题,主要包含被问及为什么HTML5里面我们不需要DTD?时的应答技巧和注意事项,需要的朋友参考一下 先说一下什么是DTD或者说我们为什么在html5之前需要使用DTD 下面是DTD的作用: 通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。 应用程

  • 我的问题是:为什么这是流动?我想是出于安全原因,但我想不通。为什么实现是这样的,而不是在第一次调用(“/authorize”)之后立即获得访问令牌? 我们为什么需要这个代码?

  • 我有一个具有两个RESTendpoint的应用程序: 获取/api/产品(不安全) POST/api/产品(安全) 对于第一个endpoint,我不想发送“授权”标头。为此,我配置了以下xml: 对于第二个endpoint,我确实想发送“授权”标头。因此,我配置了这个xml: 令我惊讶的是,GET /api/products需要一个“授权”标头,它返回401。POST /api/products工