ASP.NET Core集成Azure AD部署后Chrome不存Cookie引发循环重定向问题
问题解决方案
核心原因
该问题是Chromium内核浏览器(Chrome、Edge、Opera)的Cookie安全策略导致:部署后站点运行在HTTPS环境下,但ASP.NET Core未正确识别HTTPS协议,导致签发的身份Cookie未携带Secure属性,Chromium内核会直接拒收不带Secure标识的SameSite=None属性Cookie,因此没有身份凭证的请求会持续跳转到Azure AD登录页,形成循环重定向。
修复步骤
配置转发头识别HTTPS协议
如果部署时使用了反向代理(Nginx、IIS、Azure App Service等均默认启用反向代理),需要显式配置ASP.NET Core读取代理转发的请求头,正确识别原始请求的HTTPS协议。
首先在ConfigureServices方法中添加转发头配置:
services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 测试环境可临时清空代理限制,生产环境建议配置为你的反向代理IP options.KnownProxies.Clear(); options.KnownNetworks.Clear(); });
然后在Configure方法的最开头位置添加转发头中间件,顺序不能错,必须在其他中间件之前加载:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 放在第一行 app.UseForwardedHeaders(); // 其他原有代码不变 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } // ... 其余原有代码保持不变 }
调整Cookie安全配置
修改原有CookiePolicyOptions配置,关闭不必要的Cookie同意校验,强制Cookie使用HTTPS安全策略:
services.Configure<CookiePolicyOptions>(options => { // 未实现Cookie同意弹窗功能的话,直接关闭该配置,否则未授权用户不会收到身份Cookie options.CheckConsentNeeded = context => false; options.MinimumSameSitePolicy = SameSiteMode.None; // 强制所有Cookie携带Secure属性,仅在HTTPS下传输 options.Secure = CookieSecurePolicy.Always; options.HandleSameSiteCookieCompatibility(); });
显式配置身份Cookie属性
在AddMicrosoftIdentityWebAppAuthentication之后添加身份Cookie的安全配置:
services.AddMicrosoftIdentityWebAppAuthentication(Configuration); // 新增这部分配置 services.Configure<CookieAuthenticationOptions>(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.HttpOnly = true; });
额外校验项
- 确认Azure AD应用注册中的重定向URI为HTTPS开头,且与部署站点的域名、回调路径完全匹配
- 确认部署站点的访问地址为HTTPS,没有使用HTTP协议访问
内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

