Microsoft Active Directory中Proof Key for Code Exchange错误(AADSTS9002325)求助
解决AADSTS9002325: 跨域授权码兑换需要Proof Key for Code Exchange错误的方法
问题根源
该错误是因为微软Entra ID(原Azure AD)强制要求跨域场景下的OAuth2授权码流必须使用**PKCE(Proof Key for Code Exchange)**安全机制,当前配置未启用该机制。
具体修复步骤
- 确认项目中使用的身份验证依赖(如
msal、django-microsoft-auth)为最新版本,旧版本可能不支持PKCE。 - 若手动实现授权流程:
- 生成符合要求的
code_verifier:43-128位随机字符串,仅包含字母、数字、-、.、_、~字符。 - 通过SHA256哈希
code_verifier,再做base64url编码得到code_challenge。 - 跳转至微软登录授权页时,在URL中追加
code_challenge和code_challenge_method=S256参数。 - 兑换授权码获取令牌时,将
code_verifier作为参数提交至微软令牌端点。
- 生成符合要求的
- 若使用
django-microsoft-auth库:- 在项目
settings.py中添加配置:MICROSOFT_AUTH_AUTHENTICATION_FLOW = 'pkce' - 执行
pip install --upgrade django-microsoft-auth更新库至最新版。
- 在项目
- 检查Entra ID应用注册配置:
- 进入应用的"认证"页面,确认重定向URI配置正确。
- 在"授权码流"设置中,勾选"启用PKCE"选项(若存在)。
验证
重启Django应用,重新触发登录流程,确认授权码兑换环节已携带PKCE参数,错误不再出现。
内容的提问来源于stack exchange,提问作者Gurkirat Sidhu
相关产品推荐
相关产品推荐

