我正在一个项目中使用asp.net核心进行Facebook登录后跟tutorial。
一切看起来都不错,然后我将它部署到我的Ubuntu VPS。由于kestrel服务器不是一个完整的Web服务器所以我设置了Haproxy侦听https(443),它在1080端口(http)上路由到asp.net核心应用程序。当我访问我的网站并点击Facebook登录按钮时,我会收到Facebook的错误消息:
网址已阻止:此重定向失败,因为重定向URI未在应用的客户端OAuth设置中列入白名单。确保启用了客户端和Web OAuth登录,并将所有应用程序域添加为有效的OAuth重定向URI。
我收到此错误消息,因为参数redirect_uri是 http ://而非 https ,这预计来自Facebook应用配置。
任何想法如何解决?
答案 0 :(得分:2)
确定。我想到了。 首先,我们需要安装此包Microsoft.AspNetCore.HttpOverrides。 然后将这段代码放在文件Startup.cs
中app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpMethodOverride();
行前
app.UseFacebookAuthentication(...)
您可以找到更多here。
答案 1 :(得分:1)
如果您未指定请求方案的类型,则可以使用https生成呼叫,使用http生成另一个呼叫,facebook会将此作为不同的URL。
你只需要添加这个
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
在。
请务必在此之前设置此代码。
app.UseFacebookAuthentication(fbOptions);
答案 2 :(得分:0)
如果您有正在处理Https的前端代理,则会发生这种情况。
您的代理可以很好地管理Https,但是当它将请求转发到您的Core应用时,这是一个正常的Http请求。外部登录将使用与传入请求相同的Http / Https方案。
要解决此问题,需要执行两个步骤:
步骤1取决于您所使用的代理。如果是Nginx,则将以下内容添加到您的location
块中:
proxy_set_header X-Forwarded-Proto $scheme;
第2步涉及在Startup.cs中添加两段代码。
在ConfigurationServices(IServiceCollection services)
中,添加:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
在Configure(IApplicationBuilder app, IWebHostEnvironment env)
的开头,添加:
app.UseForwardedHeaders();
可以找到here的第2步文档。