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

如何通过Microsoft Login API获取兑换refresh_token的code及解决相关报错

解决Microsoft Login获取refresh_token的跨域及PKCE问题

方案一:后端服务发起token兑换(使用Web类型redirect_uri)

  • 将redirect_uri类型设置为Web,但必须保证第二步的/token端点请求由后端服务器发起,禁止在前端浏览器中直接调用。
  • 操作流程:
    1. 前端跳转至https://login.microsoftonline.com/common/oauth2/v2.0/authorize获取授权code。
    2. 前端将code传递给后端服务。
    3. 后端携带client_id、client_secret、code、redirect_uri等参数,发起POST请求到/token端点兑换refresh_token。
  • 原理:Web类型redirect_uri不允许前端跨域兑换token,但后端服务器发起请求不存在跨域限制,可直接避开AADSTS90023错误。

方案二:纯前端SPA应用(使用Single-page application类型redirect_uri)

  • 必须实现**PKCE(Proof Key for Code Exchange)**流程,这是SPA类型redirect_uri的强制验证要求,否则会触发"Proof Key for Code Exchange is required"错误。
  • 操作流程:
    1. 前端生成随机的code_verifier(64-128位随机字符串),通过SHA-256哈希后转换为base64url格式,得到code_challenge。
    2. 调用/authorize端点时,额外携带code_challenge和code_challenge_method=S256参数。
    3. 获取授权code后,调用/token端点时携带code_verifier参数,完成验证并获取refresh_token。

额外注意事项

  • 混合架构(前端+后端)优先选择方案一,因为SPA类型的refresh_token存储在前端存在安全风险,后端存储更可靠。
  • 确保配置的redirect_uri与请求中使用的完全一致,包括协议(http/https)、域名、端口,任何细微差异都会导致验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:54:56