为什么身份生成不安全的重定向URI?

时间:2019-02-28 23:25:30

标签: c# asp.net-core asp.net-identity

使用Asp.Net Core 2.1.4。该应用程序位于从https://github.com/jwilder/nginx-proxy泊坞镜映像运行的Nginx反向代理的后面,该映像包括x-forwarded- *标头配置。

在我的Startup.Configure方法中,我要做的第一件事是:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.All
});

然后在ConfigureServices中设置外部身份验证:

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["FacebookAppId"];
    facebookOptions.AppSecret = Configuration["FacebookSecret"];
})
.AddGoogle(googleOptions =>
{
    googleOptions.ClientId = Configuration["GoogleClientId"];
    googleOptions.ClientSecret = Configuration["GoogleClientSecret"];
});

并配置身份:

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<IdentityDbContext>()
    .AddDefaultTokenProviders();

然后我有一个控制器操作,我的登录表单会将其发布到:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

HTTP在整个站点上均有效。我在Chrome开发者工具中看到,通向https的通往“ ExternalLogin”路由的调用是通过https进行的,但是随后该应用使用http_ redirect_uri将我重定向到Facebook或Google。验证并重定向回http网址后,我的应用程序会自动重定向到https。

如何使身份生成安全的重定向uri?

1 个答案:

答案 0 :(得分:0)

根据.net核心站点中提供的文档:


如果将应用程序部署在代理服务器或负载平衡器之后,则某些原始请求信息可能会在请求标头中转发给应用程序。此信息通常包括安全请求方案(https),主机和客户端IP地址。应用不会自动读取这些请求标头来发现和使用原始请求信息。

该方案用于链接生成,该链接会影响与外部提供程序的身份验证流。 丢失安全方案(https)会导致应用生成不正确的不安全重定向URL。


要解决此问题,您可以尝试更改nginx配置并获取更多信息here