我在一个项目中使用ASP.NET Core在本教程中使用Facebook登录。
一切看起来都不错,然后我将其部署到我的Ubuntu VPS。由于Kestrel Server不是完整的Web服务器,因此我在https(443(上设置了haproxy,该途径是端口1080(HTTP(上的ASP.NET Core App的路由。当我访问我的网站并单击Facebook登录按钮时,我会收到一条错误消息表格Facebook:
URL阻止:此重定向失败,因为重定向URI未在应用程序客户端OAuth设置中列入白色。确保客户端和Web Oauth登录已打开,并将所有应用域添加为有效的OAuth重定向URIS。
我收到了此错误消息,因为参数redirect_uri是 http ://而不是 https ,它预计会从Facebook应用程序配置中。
有什么想法如何修复它?
如果您不指定请求方案的类型,则可以与HTTPS生成一个呼叫,而另一个则与HTTP一起使用,Facebook将将其视为其他URL。
您只需要添加此
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
在启动类(startup.cs(上的"配置"方法。
请确保在此之前设置此代码。
app.UseFacebookAuthentication(fbOptions);
好。我想到了。首先,我们需要在此软件包中安装Microsoft.aspnetcore.httpoverrides。然后将此代码放入文件startup.cs
中app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpMethodOverride();
在线之前
app.UseFacebookAuthentication(...)
您可以在这里找到更多。
如果您有正在处理https的前端代理,这可能会发生。
您的代理人正在管理HTTPS罚款,但是当将请求转发到您的核心应用程序时,这是正常的HTTP请求。外部登录将使用与输入请求使用的相同的HTTP/HTTPS方案。
要克服问题,需要两个步骤:
- 配置您的代理人转发协议方案。
- 配置您的应用程序以处理转发的协议标头,以确定它是否是HTTPS请求。
步骤1取决于您使用的代理。如果是nginx,则将以下内容添加到您的location
块:
proxy_set_header X-Forwarded-Proto $scheme;
步骤2涉及在启动中添加两个代码。
在ConfigurationServices(IServiceCollection services)
中,添加:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
在Configure(IApplicationBuilder app, IWebHostEnvironment env)
的开头,添加:
app.UseForwardedHeaders();
步骤2文档可以在此处找到。