在位置 HTTP header 中返回的 OAuth v2 授权码

OAuth v2 Authorization Code returned in Location HTTP header

我正在使用 OAuth 从 Microsoft Graph 获取访问令牌。我专门使用授权码授权类型。第一步是通过 HTTP GET 请求代码。然后在第二个 HTTP POST API 调用中使用该代码以及 client_idclient_secret.

令我困惑的是授权码是如何传送的。它作为名为 Location.

的 HTTP Headers 的一部分返回

这是预期的吗?我在类似于 access_token 返回方式的响应 body 中寻找它。是否通过 Location header 返回代码?

授权代码流程

此流程对于浏览器客户端来说非常标准,因此行为看起来是正确的:

  • 浏览器接收授权代码作为重定向的一部分,其中存在安全风险,例如代码包含在日志中或对用户可见,或者可能被恶意方拦截。
  • UI 的逻辑然后进行直接 HTTPS 调用以将代码交换为令牌。使用两个阶段获取 OAuth 令牌可减少浏览器客户端的威胁面。

测试代码流

代码流很难在 Postman 等工具中进行测试。看看 OAuth Tools as a better alternative - see also this video.

这是我的一些值,您可以将其用作第一步:

  • Select 添加环境并输入基础 Azure AD URL,对于我的开发者帐户,它作为发行者具有此值,然后单击发现以填充其他端点:
    https://login.microsoftonline.com/7f071fbc-8bf2-4e61-bb48-dabd8e2f5b5a/v2.0
  • 然后使用客户端 ID 启动代码流,例如我的客户端 ID:c5ea6d78-c637-4f7f-b238-2264f5d4b479
  • 然后,设置如下图所示后,开始登录重定向:

然后您可以更新到您自己的设置并对测试用户执行相同的操作。然后向下滚动并 select 'Redeem Code' 选项,并使用 client_secret_post 选项将代码交换为令牌。然后查看JWT详情等

一个问题是我的 Azure AD 客户端是单页应用程序,Azure AD 要求在兑换步骤中将此 header 添加到 curl 请求中。不确定你是否会遇到这个问题,我会看看我是否可以更新工具以允许输入额外的 headers 等。

  • -H 'Origin: https://web.mycompany.com'