AADSTS500112报错:reply address与请求授权码时提供的地址不匹配
错误根因
AADSTS500112: The reply address 'http://localhost:3000/#/training' does not match the reply address 'http://localhost:3000/' provided when requesting Authorization code
该报错触发的核心逻辑是 OAuth2 授权流程中,URI 的哈希片段(# 后的内容)属于浏览器端本地片段,不会随请求发送到 Azure AD 服务端。即使你在代码里给 redirect_uri 赋值为 http://localhost:3000/#/training,实际发送到 Azure AD 的请求中,redirect_uri 只会保留 http://localhost:3000/,和你在应用注册面板中配置的带哈希的重定向URI无法匹配,因此抛出错误。
排查与解决方案
- 先验证实际请求的参数:打开浏览器开发者工具的「网络」面板,过滤路径包含
authorize的请求,查看请求参数中的redirect_uri字段,确认是否已经丢失了#/training部分,先对齐这个前提。 - 方案1:调整Azure应用注册配置
直接在Azure AD应用注册的「身份验证」页面,将重定向URI修改为http://localhost:3000/,和服务端实际接收到的参数完全对齐。你需要的#/training跳转逻辑可以在回调处理完成后,在前端代码中手动执行跳转,不需要放到服务端配置的重定向URI里。 - 方案2:切换前端路由为History模式
如果你的项目使用Hash路由(路径带#),可以切换为History模式,此时路由路径不会携带#,所有路径都会正常发送到服务端,你可以直接配置重定向URI为http://localhost:3000/training,同时授权请求中也传入相同的完整路径即可完成匹配。 - 方案3:通过state参数传递跳转路径
符合OAuth2规范的通用方案:将需要跳转的/training路径写入授权请求的state参数中,Azure AD回调时会原封不动返回state值,你在回调页面读取state中的路径后再执行前端跳转即可,不需要修改现有重定向URI的基础配置。
内容的提问来源于stack exchange,提问作者Ozan Mudul
相关产品推荐
相关产品推荐

