使用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配置并在此处获取更多信息