使用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?
答案 0 :(得分:0)
根据.net核心站点中提供的文档:
该方案用于链接生成,该链接会影响与外部提供程序的身份验证流。 丢失安全方案(https)会导致应用生成不正确的不安全重定向URL。
要解决此问题,您可以尝试更改nginx配置并获取更多信息here