我在facebook开发者中有一个应用程序。 此应用配置了“有效OAuth重定向URI”值,其中包含http s 的网址。 但是,当我点击我的页面上的登录facebook按钮时,facebook会将我重定向到URI的http版本。这似乎是他们的OAuth模块中的facebook错误?
答案 0 :(得分:0)
当我部署到AWS Elastic Beanstalk环境并且在负载均衡器处终止SSL时,我确实遇到了这个问题。在这种情况下,服务器从负载均衡器收到的请求看起来像客户端正在连接HTTP,并且OWIN提供商错误地推断Facebook / Twitter / Google需要连接回您站点的URL应该使用HTTP而不是负载均衡器公共端的HTTPS。
我无法找到一个简单的解决方案,似乎没有任何参数可以覆盖存储在IOwinRequest.Scheme
属性中的URI协议。最后,我抓住了Katana项目的源代码和ASP.NET Identity项目的源代码,我对它进行了大量修改,以便在我的解决方案中有本地项目: / p>
在Katana中有50个左右的其他项目我遗漏了 - 我将所有这些其他依赖项Nuget包引用到官方版本。
然后我找到了对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标头,那么您的选项非常有限。您可以使用与其相同的协议重新加密流量并将其发送到您的服务器。