为什么身份会产生不安全的重定向uris



使用asp.net core 2.1.4。该应用是从https://github.com/jwilder/nginx-proxy docker image运行的Nginx反向代理后面的,其中包括X-Forwarded-* Header Configuration。

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

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

然后在Configureservices中设置外部auth:

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 Dev工具中看到通往通往``externallogin''的路线的呼叫,然后通过HTTPS制造,但随后该应用将我重定向到Facebook或Google使用redirect_uri http。在对HTTP URL进行身份验证并重定向后,我的应用自动将其重定向到HTTPS。

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

根据.NET核心网站中提供的文档:


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

该方案用于链路生成,影响外部提供商的身份验证流。丢失安全方案(HTTPS)会导致应用程序生成错误的不安全重定向URL。


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

相关内容

  • 没有找到相关文章

最新更新