Asp.net核心使用Facebook外部登录时,redirect_url不正确

时间:2017-04-23 16:25:54

标签: asp.net facebook oauth asp.net-core

我正在一个项目中使用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应用配置。

任何想法如何解决?

3 个答案:

答案 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();
       });
方法下的启动类(Startup.cs)上

请务必在此之前设置此代码。

app.UseFacebookAuthentication(fbOptions);

答案 2 :(得分:0)

如果您有正在处理Https的前端代理,则会发生这种情况。

您的代理可以很好地管理Https,但是当它将请求转发到您的Core应用时,这是一个正常的Http请求。外部登录将使用与传入请求相同的Http / Https方案。

要解决此问题,需要执行两个步骤:

  1. 配置您的代理以转发协议方案。
  2. 配置您的应用以处理转发的协议标头,以识别它是否是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步文档。

相关问题