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

ASP.NET Razor页面经FrontDoor部署后AD B2C认证遇redirect_uri_mismatch问题

解决方案

问题根源是ASP.NET Core应用部署在FrontDoor之后,默认会使用App Service的内部URL生成回调地址,而非FrontDoor的自定义域名。以下是可行的解决步骤:

1. 启用Forwarded Headers中间件

在Program.cs中添加转发头配置,让应用识别FrontDoor传递的真实客户端域名和协议:

// 放在AddAuthentication之前
builder.Services.AddForwardedHeaders(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 生产环境建议添加FrontDoor的IP地址到KnownProxies,防止伪造头
    // 可从Azure官方文档获取FrontDoor的IP范围,示例添加单个IP:
    // options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx"));
    // 若无法指定具体IP,可设置ForwardLimit(FrontDoor作为一级代理,设为2即可)
    options.ForwardLimit = 2;
});

// 在UseRouting之前调用UseForwardedHeaders
app.UseForwardedHeaders();
app.UseRouting();

2. 确认FrontDoor转发头配置

Azure FrontDoor默认会自动传递X-Forwarded-Host、X-Forwarded-Proto等头信息,无需额外配置。若曾修改过路由规则,检查"Forward HTTP headers"选项是否处于开启状态。

3. 清理AD B2C回调地址

仅保留FrontDoor自定义域名对应的回调地址:https://abc.testwebsite.com/signin-oidc,移除App Service的URL,避免应用混淆使用错误的回调地址。

备选方案:手动指定回调地址

如果转发头配置生效有问题,可在代码中手动强制指定回调地址的基础URL:

builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAdB2C")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

// 配置OpenID Connect选项
builder.Services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, options =>
{
    var frontDoorBaseUrl = "https://abc.testwebsite.com";
    // 替换回调地址
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        context.ProtocolMessage.RedirectUri = $"{frontDoorBaseUrl}{options.CallbackPath}";
        return Task.CompletedTask;
    };
});

优先推荐使用Forwarded Headers中间件方案,它符合反向代理场景的标准配置,无需硬编码域名,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:37