Azure AD登录后陷入重定向循环问题求助
解决Azure AD认证后重定向循环问题
嘿,我碰到过好几个类似的Azure AD认证循环问题,帮你梳理几个最可能的原因和解决办法:
1. 先检查Azure AD应用注册的重定向URI
这是踩坑最多的点:
- 登录Azure门户找到你的应用注册,去身份验证页面,确认重定向URI和你应用的实际回调地址完全匹配,比如
https://yourappname.azurewebsites.net/signin-oidc - 注意必须是HTTPS(你已经用了,这点没问题),但拼写、大小写绝对不能错,多一个斜杠少一个都可能出问题
2. 优化Cookie认证的配置
你改了SecurePolicy,但还有几个关键设置要调整:
.AddCookie(options => { options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 既然用HTTPS,别用None,Always更安全也更适配Azure环境 options.Cookie.SameSite = SameSiteMode.Lax; // 这个设置能避免跨站Cookie被拦截,Azure AD回调时特别重要 options.Cookie.HttpOnly = true; // 确保登录路径没冲突,如果用默认OIDC回调,不用额外设LoginPath,但别把[Authorize]加在回调路径上 })
3. 确认OIDC回调路径一致
默认情况下Azure AD的OIDC中间件用/signin-oidc作为回调路径,如果你在Azure AD里配置了自定义路径,一定要在代码里明确指定:
.AddAzureAd(options => { Configuration.Bind("AzureAd", options); options.CallbackPath = "/your-custom-callback"; // 和Azure AD应用注册里的URI完全一致 })
4. 排查授权规则的冲突
- 检查你是不是不小心把
[Authorize]属性加到了首页或者OIDC的回调路径(比如/signin-oidc)上,这样回调完成后又会触发授权,直接进入循环 - 可以先临时移除所有
[Authorize]测试,能正常登录的话,再逐个加回来找冲突的地方
5. 检查JWT Bearer中间件的干扰
你同时配置了Cookie和JWT两种认证方式,要避免冲突:
- 如果你的应用是Web页面为主,暂时移除JWT Bearer中间件试试,看循环是否消失
- 如果有API接口需要JWT,要给API控制器明确指定认证Scheme:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],别让它和Cookie认证的默认Scheme混淆
6. 看日志找精准错误
去Azure门户的应用服务里,打开日志流或者查看应用日志,里面会有详细的认证失败细节,比如Cookie写入失败、回调验证不通过等,这能帮你快速定位问题
按上面的步骤逐一排查,应该能解决这个循环问题。
内容的提问来源于stack exchange,提问作者Gainz
相关产品推荐
相关产品推荐

