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

ASP.NET Core MVC(.NET6) Azure AD认证:修正Redirect_URI的HTTP协议

解决ASP.NET Core MVC中Azure AD登录redirect_uri协议从HTTP强制改为HTTPS的问题

问题根源在于:部署在AWS Docker环境的ASP.NET Core应用,会从负载均衡接收HTTP请求;无痕模式下无会话缓存,框架无法识别前端真实请求协议,导致生成的redirect_uri使用HTTP协议,与Azure应用配置的HTTPS地址不匹配。以下是几种可行的解决方法:

方法1:配置ForwardedHeaders中间件(推荐)

AWS负载均衡会通过X-Forwarded-Proto头传递原始请求的协议信息,只需让应用信任这些转发头,即可正确识别真实请求协议。

在Program.cs中添加以下代码(需放在AddAuthentication相关配置之前):

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
    // 添加AWS负载均衡所在的可信IP段,可根据实际部署环境调整
    options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 8));
    options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("172.16.0.0"), 12));
    options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.0.0"), 16));
});

// 启用转发头中间件,位置需在身份验证中间件之前
app.UseForwardedHeaders();
app.UseAuthentication();
app.UseAuthorization();

生产环境建议严格限制可信IP段;测试阶段可临时设置options.ForwardLimit = null;和options.RequireHeaderSymmetry = false;跳过IP校验。

方法2:直接覆盖OpenID Connect的redirect_uri参数

如果转发头配置不生效,可在Azure AD身份验证配置中,强制修改跳转时的redirect_uri协议:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        options.Events = new OpenIdConnectEvents
        {
            OnRedirectToIdentityProvider = context =>
            {
                // 将HTTP协议替换为HTTPS,保留原路径
                context.ProtocolMessage.RedirectUri = context.ProtocolMessage.RedirectUri
                    .Replace("http://", "https://", StringComparison.OrdinalIgnoreCase);
                return Task.CompletedTask;
            }
        };
    });

方法3:固定配置应用Base URL为HTTPS

如果域名固定,可直接在配置中指定HTTPS的Base URL,构造正确的redirect_uri:

  1. 在appsettings.json中添加配置:
{
  "AppSettings": {
    "BaseUrl": "https://your-domain.com"
  }
}
  1. 在Program.cs中引用该配置:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        var baseUrl = builder.Configuration["AppSettings:BaseUrl"];
        options.RedirectUri = $"{baseUrl}{options.CallbackPath}";
    });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:56:29