ServiceStack v4.0.24.0在Azure上使用Google OAuth失败,返回502错误。

4

升级到ServiceStack 4.0.24.0后,当尝试使用Google OAuth登录时,我开始收到以下错误。

enter image description here

这个在我的开发机上也能正常工作。自4.0.21.0以来有什么变化吗?


嗨,你解决问题了吗?我仍然无法使用Google登录。 - gjspaho
1个回答

1
这是一个相当奇怪的问题,但最近我进行了一些研究,发现以下情况。似乎Azure网站不喜欢从OAuth2ProviderAuthenticate方法返回的HttpResult

请注意:此问题仅在托管于Azure网站时存在。当托管在其他地方时,ServiceStack OAuth2Providers(4.0.24到4.0.40)按预期工作。

具体而言,当返回HttpResult时,它不喜欢设置Content-Length标头。我不确定为什么会出现这种情况,因为在本地和部署到我自己在AWS上的IIS主机时都可以正常工作。

创建了一个存储库,您可以部署它以突出显示此问题。

Azure网站似乎与标准IIS设置(例如,在干净的VM上通过Web Installer安装)对此响应进行了不同的解释,这似乎是问题的原因。

一个(不是很好的)解决方法是使用一个 GlobalResponseFilter 去掉只有 GoogleOAuth2Provider 响应中的 Content-Length 头。

我已经测试过了,确实按预期工作,我能够使用 Google OAuth 登录。这里有一个使用 GlobalResponseFilter 解决此问题的示例。

GlobalResponseFilters.Add((req, res, dto) =>
{
    if (!req.PathInfo.EndsWith("/auth/GoogleOAuth", true, CultureInfo.InvariantCulture))
    {
        return;
    }
    HttpResult httpResult = dto as HttpResult;
    if (httpResult != null && httpResult.Headers.ContainsKey("Content-Length"))
    {
        httpResult.Headers.Remove("Content-Length");
    }
});

希望有人能指出Azure网站这样做的原因。希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接