NET Core 反向代理和身份验证中间件
NET Core reverse proxy and authentication middleware
我在 Azure 应用服务上托管了 .Net Core 应用程序,并在 Azure Front Door 反向代理中设置了自定义域名。
外部身份验证 (Facebook) 在我 运行 在本地应用程序和在 Azure 上直接使用 [app_name].azurewebsites.net URL.
但是,当我从我的自定义域或通过 [app_name].azurefd.net.
访问应用程序时,通过 facebook 登录时出现服务器错误
问题似乎是,在授权之后,用户被重定向回应用服务域 (.azurewebsites.net/),而不是自定义域。
我已经在应用程序中配置了转发 headers,但这似乎没有帮助。
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();
});
我的登录码是NET Core默认生成的:
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
似乎没有 Redirect_URI 属性 我可以在 Facebook 中间件选项中设置。
tldr:即使从自定义域访问应用程序,我的 .net 核心外部身份验证中间件也会重定向到 azure 域而不是我的自定义域。 NET Core 中配置的 headers 我已经转发了。
更新:为清楚起见进行了编辑
Update2:也试过以下方法无济于事:
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();
});
根据以下问题,应用程序网关上的重定向也存在同样的问题:
感谢 Tratcher 对这个问题的回答。解决方案是在 Startup.cs 的 Configure 方法中添加以下内容:
app.Use((ctx, next) =>
{
ctx.Request.Host = new HostString(options.Value.CustomDomain);
return next();
});
我在 Azure 应用服务上托管了 .Net Core 应用程序,并在 Azure Front Door 反向代理中设置了自定义域名。
外部身份验证 (Facebook) 在我 运行 在本地应用程序和在 Azure 上直接使用 [app_name].azurewebsites.net URL.
但是,当我从我的自定义域或通过 [app_name].azurefd.net.
访问应用程序时,通过 facebook 登录时出现服务器错误问题似乎是,在授权之后,用户被重定向回应用服务域 (.azurewebsites.net/),而不是自定义域。
我已经在应用程序中配置了转发 headers,但这似乎没有帮助。
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();
});
我的登录码是NET Core默认生成的:
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
似乎没有 Redirect_URI 属性 我可以在 Facebook 中间件选项中设置。
tldr:即使从自定义域访问应用程序,我的 .net 核心外部身份验证中间件也会重定向到 azure 域而不是我的自定义域。 NET Core 中配置的 headers 我已经转发了。
更新:为清楚起见进行了编辑
Update2:也试过以下方法无济于事:
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();
});
根据以下问题,应用程序网关上的重定向也存在同样的问题:
感谢 Tratcher 对这个问题的回答。解决方案是在 Startup.cs 的 Configure 方法中添加以下内容:
app.Use((ctx, next) =>
{
ctx.Request.Host = new HostString(options.Value.CustomDomain);
return next();
});