You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Microsoft Graph OAuth2授权码流中Authorization Code通过Location HTTP头部返回的合规性咨询

关于OAuth 2.0 Authorization Code通过Location头部传递的规范说明

嘿,这完全是符合OAuth 2.0 Authorization Code授权规范的正常行为,不用疑惑!

为什么授权码会通过Location头部传递?

Authorization Code流程的第一步(获取授权码)本质上是用户引导流程,核心逻辑是:

  • 你发起的GET请求是告诉身份提供者(这里是Microsoft)"请让用户登录并授权我的应用"
  • 当用户完成登录和授权操作后,身份提供者不能直接给你返回响应体——因为此时请求上下文是用户的浏览器,必须把用户的浏览器重定向回你预先配置的redirect_uri(你的应用回调地址)
  • 为了把授权码传递给你的应用,身份提供者会把它作为查询参数附加到redirect_uri上,然后通过HTTP 3xx重定向响应的Location头部返回这个完整的URL。举个例子,Location头部的值可能看起来是这样:
    Location: https://your-app-domain.com/auth/callback?code=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6...&state=random-string-you-sent&session_state=abc123
    

和access_token返回方式的区别

你觉得授权码应该像access_token那样在响应体里返回,是因为两步请求的场景完全不同:

  • 第一步(获取授权码):是浏览器与身份提供者的交互,需要完成用户引导,所以用重定向传递参数是唯一符合浏览器行为的方式,这是OAuth 2.0规范明确要求的。
  • 第二步(用授权码换access_token):是你的应用后端与身份提供者token端点的服务器对服务器交互,不需要浏览器参与,所以用JSON响应体返回access_token是更直接、安全的方式。

针对Microsoft Graph的补充说明

微软完全遵循OAuth 2.0的这个规范,你需要注意:

  • 确保你在Azure AD应用注册里配置的redirect_uri和请求里的一致,否则会重定向失败
  • 你的应用回调端点需要从请求的查询参数中提取code值(而不是直接解析Location头部,因为浏览器会自动跳转到这个URL,你的后端收到的是跳转后的请求)
  • 一定要验证state参数,确保和你发起授权请求时传入的一致,防止CSRF攻击

内容的提问来源于stack exchange,提问作者webworm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:02:46