【问题标题】:ASP.NET Core app with Azure AD authentication behind a reverse proxy is setting the wrong redirect_uri在反向代理后面使用 Azure AD 身份验证的 ASP.NET Core 应用设置了错误的 redirect_uri
【发布时间】:2021-01-25 15:30:30
【问题描述】:

我一直在努力解决这个问题。 我有一个在 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 中配置的地址。进一步调查显示,请求中向应用服务提供了以下标头:

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 似乎是唯一包含实际请求主机的)? 这似乎是一个非常简单的用例。 提前感谢您的帮助。

【问题讨论】:

  • 您是否也在应用服务中设置了自定义域?
  • @Ricardo 没有。当它应该由网关处理时,在我的脑海中设置应用服务上的自定义域没有多大意义。
  • 不一定和 Azure 有关。请参阅下面的答案。

标签: azure asp.net-core oauth-2.0 azure-active-directory azure-application-gateway


【解决方案1】:

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

问候, 姆里尼

【讨论】:

  • 当我尝试在 HTTP 设置中设置我的自定义域时,我得到一个 502 错误网关。使用自定义域配置后端是什么意思?谢谢
  • 在您的应用服务中,您有一个称为自定义域的选项。您需要对其进行配置,以便可以在应用程序网关 HTTPSettings 中使用相同的 FQDN
  • 好吧,当应用服务附加了自定义域和 SSL 证书时,它似乎已经工作了。我仍然觉得必须在 App Gateway 和 App Service 中设置证书是违反直觉的。
  • 如果应用程序网关配置了端到端 SSL,那么您需要在两个地方都设置证书。
【解决方案2】:

我刚碰到这个。确保在您的选项配置中包含XForwardedHost,或者像这样包含ForwardedHeaders.All

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多