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

将应用与身份服务器App Service迁移至Azure Front Door后出现无限重定向

解决Azure Front Door配置后App与Duende Identity Server的无限重定向问题

以下是针对该无限重定向循环问题的排查和解决步骤:

1. 配置App Service的转发头识别

Azure Front Door会向后端App Service发送X-Forwarded-For、X-Forwarded-Proto等头信息,应用必须正确识别这些头才能获取真实的请求协议和域名,否则Cookie的Secure属性、域设置会出错,导致登录状态无法保持。

  • 在Azure Portal的App Service资源中,进入「配置」>「常规设置」,将「Forwarded Headers」设置为「On」。
  • 若为ASP.NET Core应用,在Program.cs中添加转发头中间件(需放在认证中间件之前):
    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });
    

2. 修正Cookie的Domain和SameSite属性

由于app.mydomain.com和auth.mydomain.com属于同一主域mydomain.com,需确保登录相关Cookie的域设置正确,适配跨域场景:

  • 在BFF配置中,将Cookie的Domain设为.mydomain.com(前缀点确保子域均可访问):
    builder.Services.AddBff(options =>
    {
        options.Cookies.SessionCookie.Domain = ".mydomain.com";
        options.Cookies.AntiforgeryCookie.Domain = ".mydomain.com";
    });
    
  • 开启Cookie的Secure属性(适配Front Door的HTTPS环境),并设置合适的SameSite值:
    builder.Services.Configure<CookiePolicyOptions>(options =>
    {
        options.MinimumSameSitePolicy = SameSiteMode.Lax;
        options.Secure = CookieSecurePolicy.Always;
    });
    

3. 验证Duende Identity Server的回调地址配置

确保Identity Server中客户端的回调地址指向Front Door端点,而非App Service原始地址:

  • 在Identity Server的客户端配置里,更新RedirectUris和PostLogoutRedirectUris:
    new Client
    {
        ClientId = "app-client",
        // 其他配置...
        RedirectUris = { "https://app.mydomain.com/signin-oidc" },
        PostLogoutRedirectUris = { "https://app.mydomain.com/signout-callback-oidc" },
        FrontChannelLogoutUri = "https://app.mydomain.com/bff/logout"
    }
    

4. 检查Front Door的路由与缓存设置

  • 禁止缓存登录相关路径(如/bff/*、/signin-oidc、/connect/authorize):进入Front Door「路由规则」,将对应路由的「缓存行为」设为「不缓存」,或添加缓存排除路径。
  • 确保Front Door传递Cookie、Authorization等关键请求头,路由规则的「转发协议」选择「HTTPS only」,并启用传递客户端头选项。

5. 确认BFF的OIDC回调处理逻辑

检查BFF的OIDC配置,确保回调路径和身份提供者地址正确,且转发头配置生效:

builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = "cookie";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("cookie", options =>
{
    options.Cookie.Domain = ".mydomain.com";
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.Cookie.SameSite = SameSiteMode.Lax;
})
.AddOpenIdConnect("oidc", options =>
{
    options.Authority = "https://auth.mydomain.com";
    options.ClientId = "app-client";
    options.ClientSecret = "your-client-secret";
    options.ResponseType = "code";
    options.Scope = new List<string> { "openid", "profile" };
    options.SaveTokens = true;
    options.CallbackPath = "/signin-oidc";
    options.SignedOutCallbackPath = "/signout-callback-oidc";
    
    // 强制回调地址指向Front Door端点
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        context.ProtocolMessage.RedirectUri = "https://app.mydomain.com/signin-oidc";
        return Task.CompletedTask;
    };
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:45:01