【问题标题】:OAuth v2 Authorization Code returned in Location HTTP header位置 HTTP 标头中返回的 OAuth v2 授权代码
【发布时间】:2021-02-20 02:17:11
【问题描述】:

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

让我感到困惑的是授权码是如何传递的。它作为名为 Location 的 HTTP 标头的一部分返回。

这是预期的吗?我在一个类似于access_token 返回的响应正文中寻找它。是否应通过 Location 标头返回代码?

【问题讨论】:

    标签: api oauth-2.0 microsoft-graph-api dynamics-365


    【解决方案1】:

    授权码流程

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

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

    测试代码流

    在 Postman 等工具中测试代码流很棘手。看看OAuth Tools 作为更好的选择 - 另见this video

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

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

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

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

    • -H '来源:https://web.mycompany.com'

    【讨论】:

    • 感谢您的帮助。我的意图是使用浏览器请求 Auth 代码,然后一旦获得 Auth 代码,然后使用 Auth 代码进行第二次 POST 以请求令牌。我只是在 Postman 客户端中执行此操作,以确认在编码之前我的流程正常工作。这有帮助吗?
    • 是的 - 一切看起来都是正确的然后先生 webworm - 我已经编辑了我的答案 - 也看看上面的测试选项
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2016-07-31
    • 1970-01-01
    • 2012-04-18
    • 2017-07-04
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多