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



我在一个项目中使用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方案。

要克服问题,需要两个步骤:

  1. 配置您的代理人转发协议方案。
  2. 配置您的应用程序以处理转发的协议标头,以确定它是否是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文档可以在此处找到。

最新更新