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

Azure AD结合应用网关时ASP Core 2.0应用重定向问题咨询

解决Azure应用代理后ASP.NET Core 2.0 Azure AD登录重定向问题

针对你遇到的问题,核心原因是你的ASP.NET Core应用在Azure应用代理后面运行时,默认会使用内部服务器的主机名(intervalServer)生成OpenID Connect的回调URI,而非外部可访问的ourapp.msappproxy.net,导致登录后重定向到无法访问的内部地址。下面是具体的解决方案和对你疑问的解答:

一、核心修复步骤

1. 配置应用信任反向代理的转发头部

Azure应用代理会将外部请求的真实主机、协议等信息通过X-Forwarded-Host、X-Forwarded-Proto等HTTP头部转发给内部应用。你需要让ASP.NET Core识别这些头部,从而生成正确的外部回调URI。

在Startup.cs的ConfigureServices方法中添加转发头部配置:

services.Configure<ForwardedHeadersOptions>(options =>
{
    // 启用转发主机、协议和客户端IP
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
    // 生产环境建议添加Azure应用代理的IP范围到已知代理列表,避免恶意头部攻击
    // 可从Azure文档获取应用代理IP范围,这里示例添加单个IP
    options.KnownProxies.Add(IPAddress.Parse("应用代理的公网IP"));
});

然后在Configure方法中,在UseAuthentication之前调用UseForwardedHeaders:

app.UseForwardedHeaders();
app.UseAuthentication();
app.UseMvc(); // 或你的其他业务中间件

2. 显式配置OpenID Connect的回调URL

你不需要修改CallbackPath(它始终是相对路径),而是要设置RedirectUri为完整的外部可访问URL,同时确保Azure AD应用注册中的回复URL包含这个地址。

在AddOpenIdConnect配置中补充:

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
    options.ClientId = "你的Azure AD应用客户端ID";
    options.Authority = "https://login.microsoftonline.com/你的租户ID/v2.0";
    // 设置完整的外部回调URL
    options.RedirectUri = "https://ourapp.msappproxy.net/signin-oidc";
    options.CallbackPath = "/signin-oidc"; // 保持相对路径不变
    // 其他必要配置
    options.SaveTokens = true;
    options.ResponseType = "code";
});

同时登录Azure门户,找到你的应用注册,在身份验证页面的重定向URI列表中添加https://ourapp.msappproxy.net/signin-oidc,确保类型选择Web。


二、对你疑问的解答

1. 若将重定向地址改为ourapp.msappproxy.net/signin-oidc,能否解决登录问题?

是的,这正是解决问题的核心方向,但要注意正确的配置方式:不是修改CallbackPath为绝对路径(它仅支持相对路径),而是通过设置RedirectUri为完整的外部URL,同时让应用信任代理转发的头部,这样Azure AD登录后会正确重定向到外部可访问的回调地址,而非内部的intervalServer/signin-oidc。

2. 是否需要额外登录步骤,或应修改应用使其接受AzureAppProxyUserSessionCookie或AzureAppProxyAccessCookie?

不需要额外的登录步骤,也不需要直接处理这些代理Cookie。Azure应用代理会自动处理这些Cookie的验证和转发,你的ASP.NET Core应用只需正常处理Azure AD的OpenID Connect登录流程即可。只要正确配置了转发头部和回调URL,应用代理会把经过验证的请求(或匿名请求)转发给内部应用,应用无需感知代理的存在。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:05