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

.NET6配置Azure AD OpenIDConnect自定义RedirectURI不生效问题

问题根因

出现带44345端口的默认域名作为OAuth授权请求redirect_uri参数的核心原因,是Azure App Service前端反向代理转发请求到应用运行实例时,携带的原始对外主机名、访问协议信息没有被ASP.NET Core中间件正确识别,OpenID Connect认证中间件自动拼接回调地址时,拿到的是代理侧的内部访问地址,而非用户实际访问的自定义域名。
注意:直接在Azure AD应用注册的重定向URI列表中添加带44345端口的默认域名无法解决问题,该端口是Azure内部转发使用的端口,公网用户无法直接访问,回调时会直接触发连接失败。

解决方案

你可以根据实际场景二选一配置:

方案1:代码强制指定固定回调地址

该方案配置最简单,不受部署环境请求头影响,适合使用固定自定义域名的场景。
直接修改现有OpenID Connect配置,在跳转至AAD授权页的事件中显式指定正确的回调地址,覆盖中间件自动生成的错误值:

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0";
    options.TokenValidationParameters.ValidateIssuer = false;
    
    // 配置授权跳转事件,强制指定重定向URI
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        // 此处地址必须和Azure AD中配置的自定义域名回调地址完全一致
        context.ProtocolMessage.RedirectUri = "https://custom_domain/signin-oidc";
        return Task.CompletedTask;
    };
});

配置后所有发往AAD的授权请求都会使用你指定的自定义域名作为回调地址,不会再自动生成内部域名地址。

方案2:配置转发头中间件,修复域名自动识别逻辑

该方案无需硬编码域名,中间件会自动识别用户实际访问的域名、协议生成正确的回调地址,适合绑定多个自定义域名、后续可能调整域名的场景。

  1. 首先在ConfigureServices方法中添加转发头配置,放行Azure App Service的反向代理网段:
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ForwardedHeadersOptions>(options =>
    {
        // 配置需要转发的头信息:源IP、协议、主机名
        options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor 
            | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto 
            | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedHost;
        // 放行Azure反向代理的内网网段,避免被安全规则拦截
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 8));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
    });

    // 保留你原有的服务配置,包括Azure AD认证、MVC等相关注册代码
    // services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    //     .AddAzureAD(options => Configuration.Bind("AzureAd", options));
    // services.AddControllersWithViews();
}
  1. 在Configure方法中,将转发头中间件放在所有其他中间件的最前面,确保后续所有中间件都能拿到正确的请求信息:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 必须放在第一行注册
    app.UseForwardedHeaders();

    // 保留你原有的中间件配置顺序
    // app.UseHttpsRedirection();
    // app.UseStaticFiles();
    // app.UseRouting();
    // app.UseAuthentication();
    // app.UseAuthorization();
    // app.UseEndpoints(endpoints =>
    // {
    //     endpoints.MapControllerRoute(
    //         name: "default",
    //         pattern: "{controller=Home}/{action=Index}/{id?}");
    // });
}

配置完成后重启应用,OpenID Connect中间件会自动从转发头中读取用户实际访问的自定义域名,拼接出正确的回调地址。

注意事项

  • 使用方案1时,代码中填写的RedirectUri必须和Azure AD应用注册中配置的重定向URI完全匹配,包括HTTP/HTTPS协议、域名、路径、端口,任意字符不一致都会触发AAD的重定向URI不匹配错误。
  • 如果配置后出现回调地址为HTTP协议的情况,先检查Azure App Service「配置-常规设置」中是否开启了「HTTPS Only」选项,开启后会强制所有访问使用HTTPS协议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:57:21