在反向代理后面具有Azure AD身份验证的ASP.NET Core应用设置了错误的redirect_uri

问题描述

我已经为此努力了一段时间。 我有一个在Azure应用服务上运行的ASP.NET Core 3.1 Web应用。该Web应用程序具有Azure AD身份验证设置,带有转发的标头。 这是ConfigureService

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

services
    .AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options =>
    {
        Configuration.Bind("AzureAd",options);
    });

这是Configure

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseForwardedHeaders();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseForwardedHeaders();
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();

app.UseRouting();
app.UseCors(Configuration["AllowedHosts"]);
app.UseAuthentication();
app.UseAuthorization();

我正在使用Azure应用程序网关作为反向代理。 身份验证流程中出现问题。经过身份验证后,URL中提供的redirect_uri是*.azurewebsites.net地址,而不是我在App Gateway *.mydomain.com中配置的地址。。进一步调查发现,在请求中向App Service提供了以下标头:

X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443
X-Forwarded-For: ***IP ADDR OF APP GATEWAY***
X-Original-URL: ***
X-ORIGINAL-HOST: *.mydomain.com
X-ARR-SSL: 2048|256|C=US,S=Washington,L=Redmond,O=Microsoft Corporation,OU=Microsoft IT,CN=Microsoft IT TLS CA 5|CN=*.azurewebsites.net
X-AppService-Proto: https
X-Forwarded-Tlsversion: 1.2

我还需要告诉后端应用程序使用转发的标头(在我的情况下,X-ORIGINAL-HOST似乎是包含实际请求主机的唯一主机)? 这似乎是一个非常简单的用例。 预先感谢您的帮助。

解决方法

在“主机名设置”下的“ HTTP设置”中,提及* .domain.com。如果进行了更改,请确保已使用自定义域配置了后端。

关于, 姆斯里尼

,

我刚遇到这个。确保在您的选项配置中包含XForwardedHost,或仅包含ForwardedHeaders.All,如下所示:

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.All;
});