Authentication NET核心反向代理和认证中间件

Authentication NET核心反向代理和认证中间件,authentication,asp.net-core,proxy,http-headers,azure-front-door,Authentication,Asp.net Core,Proxy,Http Headers,Azure Front Door,我将.Net核心应用程序托管在Azure应用程序服务上,并在Azure前门反向代理中设置了自定义域名 当我在本地运行应用程序以及直接使用[app_name].azurewebsites.net URL在Azure上访问应用程序时,外部身份验证(Facebook)就会实现并起作用 但是,当从我的自定义域或通过[app_name].azurefd.net访问应用程序时,通过facebook登录时,我遇到了一个服务器错误 问题似乎是,在进行身份验证后,用户被重定向回应用程序服务域(.azurewebs

我将.Net核心应用程序托管在Azure应用程序服务上,并在Azure前门反向代理中设置了自定义域名

当我在本地运行应用程序以及直接使用[app_name].azurewebsites.net URL在Azure上访问应用程序时,外部身份验证(Facebook)就会实现并起作用

但是,当从我的自定义域或通过[app_name].azurefd.net访问应用程序时,通过facebook登录时,我遇到了一个服务器错误

问题似乎是,在进行身份验证后,用户被重定向回应用程序服务域(.azurewebsites.net/),而不是自定义域

我在应用程序中配置了转发头,但这似乎没有帮助

 services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedHost;
                options.ForwardedHostHeaderName = "X-Original-Host";
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear();
            });

根据以下问题,应用程序网关上的重定向存在相同问题:

谢谢你对这个问题的回答。解决方案是在Startup.cs的Configure方法中添加以下内容:

app.Use((ctx, next) =>
{
    ctx.Request.Host = new HostString(options.Value.CustomDomain);
    return next();
});

通过在登录对话框URL中指定正确的
重定向\u uri
,可以将用户发送到。确定。我该怎么做?这应该是一些配置设置或其他的问题。如果您正在使用的库根据在某个地方设置的主应用程序域或类似的内容动态确定此选项,则您可能需要将自己的权限限制为在一个域上使用此选项。选项是什么?你从哪里得到的?
app.Use(async (context, next) =>
            {
                if (context.Request.Headers.Any(x => x.Value == "X-Original-Host") != false)
                {
                    var originalHost = context.Request.Headers.FirstOrDefault(x => x.Value == "X-Original-Host").Value;
                    context.Request.Headers.Add("Host", originalHost);
                }
                await next.Invoke();
            });
app.Use((ctx, next) =>
{
    ctx.Request.Host = new HostString(options.Value.CustomDomain);
    return next();
});