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

Azure AD登录重定向中断问题求助(ASP.NET Core+Cloudflare代理)

问题:Azure AD认证在Cloudflare代理下偶尔卡住超时

环境与代码配置

ASP.NET Core应用托管在Azure App Service,通过Cloudflare代理。已配置ASP.NET Core Identity Cookie,额外添加以下认证扩展方法:

internal static AuthenticationBuilder AddAzureAd(this AuthenticationBuilder authenticationBuilder, IConfiguration config)
{
    void configureMicrosoftIdentityOptions(OpenIdConnectOptions options)
    {
        options.Authority = config["xxx:Authority"];
        options.ClientId = config["xxx:ClientId"];
        options.ClientSecret = config["xxx:ClientSecret"];
        options.SignInScheme = IdentityConstants.ApplicationScheme;
        options.ResponseType = OpenIdConnectResponseType.IdToken;
        options.Prompt = "select_account";
    
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = false,
            ValidAudience = config["xxx:ClientId"],
        };
    };

    return authenticationBuilder.AddOpenIdConnect("AzureAD", configureMicrosoftIdentityOptions);
}

public static AuthenticationBuilder AddCookieLogin(this AuthenticationBuilder authenticationBuilder)
{
    void configureCookieAuthOptions(CookieAuthenticationOptions options)
    {
        options.Cookie.Name = "MyApp";
        options.Cookie.IsEssential = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
        options.ExpireTimeSpan = TimeSpan.FromDays(1);
        options.SlidingExpiration = true;
        options.LoginPath = "/signin";
    }

    return authenticationBuilder.AddCookie(configureCookieAuthOptions);
}

认证流程通过控制器动作触发:
return Challenge(new AuthenticationProperties { RedirectUri = "/" }, scheme);

Azure AD应用注册配置正常,重定向URI设置为{MYURIHERE}/signin-oidc。

问题现象

本地测试完全正常,日志显示Azure AD回调后用户已登录,从signin-oidc端点跳转至指定重定向URI。但启用Cloudflare代理后,偶尔出现登录Azure AD后浏览器卡住直至超时的情况,此时浏览器地址为:
https://login.microsoftonline.com/common/reprocess?ctx=xxx0&sessionid=yyy

应用日志仍记录“AuthenticationScheme: xxx signed in.”,且仅记录到Request finished HTTP/1.1 POST XXX/signin-oidc - 302 0 - 1014.6661ms后便无后续日志。提前按CTRL+F5清理缓存可临时解决问题,尝试调整Cookie配置、在登录页加载前设置Clear-Site-Data header均无效。

2023-10-16更新

将AddOpenIdConnect替换为AddMicrosoftAccount后问题依旧,浏览器卡在https://login.microsoftonline.com/common/oauth2/v2.0/authorize页面,Edge浏览器左下角提示“waiting for MYREDIRECTURIDOMAIN.com”。另一套同样通过Cloudflare代理的ASP.NET Core应用使用Azure内置认证方法无此问题,判断问题出在自定义认证代码中。

排查与解决建议

  • 排除认证端点的Cloudflare缓存:确保/signin-oidc、/signin等认证相关端点被添加到Cloudflare的缓存排除规则中,避免代理缓存认证响应或Cookie。
  • 配置Cookie的SameSite属性:当前代码未设置SameSite属性,在代理跨域场景下可能导致Cookie无法正确传递。建议添加:
    options.Cookie.SameSite = SameSiteMode.Lax;
    
    若需跨域传递Cookie,可设置为SameSiteMode.None(需确保SecurePolicy保持CookieSecurePolicy.Always)。
  • 启用转发头部处理:由于应用通过Cloudflare代理,需正确识别原始请求的协议和主机。在Program.cs中添加:
    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });
    
    同时在Azure App Service的配置中启用“Forwarded Headers”选项,确保Cloudflare传递的X-Forwarded-Proto等头部被应用正确识别。
  • 显式指定OpenIdConnect回调路径:在AddAzureAd的配置中显式设置CallbackPath,避免自动生成路径出现不一致:
    options.CallbackPath = "/signin-oidc";
    
  • 检查Cloudflare WAF规则:查看Cloudflare防火墙日志,确认是否有WAF规则拦截了认证回调的请求,如有则调整规则放行相关请求。
  • 对照Azure内置认证配置:导出使用Azure内置认证的应用配置,对比其自动生成的认证代码(如Cookie设置、转发头部处理、OpenIdConnect参数等),补全自定义代码中缺失的关键配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:30:17