繁体   English   中英

MVC 5应用-Facebook应用重定向到错误的URI-redirect_uri = http而不是redirect_uri = https

[英]MVC 5 app - facebook app redirects to the wrong URI - redirect_uri=http instead of redirect_uri=https

我在Facebook开发人员中有一个应用程序。 此应用配置了“有效OAuth重定向URI”值,并带有带有URL的http s 但是,当我单击页面上的“使用Facebook登录”按钮时,facebook会将我重定向到URI的http版本。 这似乎是其OAuth模块中的一个Facebook错误?

当我部署到负载均衡器上终止SSL的AWS Elastic Beanstalk环境时,我遇到了这个问题。 在这种情况下,服务器从负载均衡器收到的请求看起来像客户端正在使用HTTP连接,OWIN提供程序错误地推断出Facebook / Twitter / Google需要重新连接到您的站点的URL应该使用HTTP而不是负载均衡器公共端的HTTPS。

我找不到一个简单的解决方案,似乎没有任何参数可以覆盖存储在IOwinRequest.Scheme属性中的URI协议。 最后,我获取了Katana项目的源代码和ASP.NET Identity项目的源代码,并对它进行了一些修改,以便在解决方案中包含本地项目:

  • Microsoft.AspNet.Identity.Core
  • Microsoft.AspNet.Identity.EntityFramework
  • Microsoft.AspNet.Identity.Owin
  • Microsoft.Owin.Security.Cookies
  • 微软.Owin.Security.Facebook
  • Microsoft.Owin.Security.Google
  • Microsoft.Owin.Security.OAuth
  • Microsoft.Owin.Security.Twitter

我在Katana中遗漏了大约50个其他项目-我将所有其他依赖项Nuget包都引用到了正式版本。

然后,我找到了对IOwinRequest.Scheme所有引用,并用IOwinRequest.Scheme代码替换了该代码段,该代码段还查找了使用SSL卸载时负载均衡器注入的X-Forwarded-Proto标头。

像这样:

var scheme = Request.Scheme;

if (string.Equals(Request.Headers["X-Forwarded-Proto"], "https", StringComparison.InvariantCultureIgnoreCase))
{
    scheme = "https";
}

// Use the scheme in the construction of a URI...

如果您的负载平衡器或代理服务器不提供X-Forwarded-Proto标头,那么您的选择将非常有限。 您可以重新加密流量,并使用与之相同的协议将其发送到服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM