在AppHarbor上使用https-only app重定向_uri_mismatch

时间:2014-09-02 18:29:56

标签: asp.net-mvc oauth-2.0 google-oauth appharbor

我已将MVC 5网站部署到AppHarbor,感谢由AppHarbor支持链接的this gist启用了仅支持https的应用。

当我在本地连接到Google OAuth 2提供程序时,一切正常 - 我可以毫无问题地登录,但是当我在AppHarbor上尝试时,我在登录时遇到错误" redirect_uri_mismatch"。我已经为网络应用程序获得了正确的密钥和秘密设置,问题在于路径,由于某种原因,我的页面以redirect_uri响应,以" http://..."而不是" https://..."我在谷歌项目控制台中设置的 - (除此之外它是相同的uri)。

我已经针对基于网址的问题尝试了this workaround,但它似乎没有改变任何内容。

因为我不认为切换到http for / signin-google会是一个好主意 - 如何修复它?

1 个答案:

答案 0 :(得分:4)

几个月后,我希望这会对某人有所帮助。我在AppHarbor负载均衡器上遇到了完全相同的问题,并且在redirect_uri字符串中丢失了“https”。我找到的最简单的解决方案是在注册外部登录提供程序之前在Startup.Auth.cs中注册几行代码,如中间件:

        app.Use(async (context, next) =>
        {
            if (string.Equals(context.Request.Headers["X-Forwarded-Proto"], "https", StringComparison.InvariantCultureIgnoreCase))
            {
                context.Request.Scheme = "https";
            }

            await next.Invoke();
        });

这个简单的中间件检查AppHarbor标头“X-Forwarded-Proto”,如果存在则只添加一个正确的Scheme属性。如果你看一下Katana's code正确的Scheme属性来解决问题:

    ...
    string requestPrefix = Request.Scheme + "://" + Request.Host;
    string redirectUri = requestPrefix + Request.PathBase + Options.CallbackPath;
    ...