servicestack,Azure,Oauth 2.0,servicestack" /> servicestack,Azure,Oauth 2.0,servicestack" />

Azure上的ServiceStack v4.0.24.0 Google OAuth失败,返回502

Azure上的ServiceStack v4.0.24.0 Google OAuth失败,返回502,azure,oauth-2.0,servicestack,Azure,Oauth 2.0,servicestack,在升级到ServiceStack到4.0.24.0之后,我在尝试使用Google OAuth登录时开始收到以下错误 这同样适用于我的开发机器。 自4.0.21.0以来有什么变化吗 从地址栏可以看到,该站点位于Azure上 我有SS的授权版本 Google OAuth回调url已正确注册 使用ServiceStack.Authentication.OAuth2 4.0.24.0 这是一个非常奇怪的问题,但最近我做了一些挖掘,以下是我发现的。Azure网站似乎不喜欢从OAuth2Provider

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

这同样适用于我的开发机器。 自4.0.21.0以来有什么变化吗

  • 从地址栏可以看到,该站点位于Azure上
  • 我有SS的授权版本
  • Google OAuth回调url已正确注册
  • 使用ServiceStack.Authentication.OAuth2 4.0.24.0

    • 这是一个非常奇怪的问题,但最近我做了一些挖掘,以下是我发现的。Azure网站似乎不喜欢从
      OAuth2Provider上的
      Authenticate
      方法返回的
      HttpResult

      重要注意事项:此问题仅在Azure网站上托管时出现。ServiceStack OAuth2Providers(4.0.24至4.0.40)在其他位置托管时按预期工作

      具体来说,它不喜欢在返回
      HttpResult
      时设置
      Content-Length
      标题。我不确定为什么会出现这种情况,因为它在本地工作,并且部署到AWS上我自己的IIS主机上

      我相信您可以部署自己来突出这个问题

      Azure网站对该响应的解释似乎与标准IIS设置(例如,通过干净VM上的Web安装程序安装)不同,这似乎是导致问题的原因

      一个(不是很好的)解决方法是使用
      GlobalResponseFilter
      剥离
      内容长度
      标题,仅谷歌OAuth2Provider
      响应

      我已经对此进行了测试,并且确实按照预期工作,我能够使用GoogleOAuth登录。下面是一个使用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网站为什么会这样做,那就太好了


      希望这能有所帮助。

      Hi-你有没有遇到这个问题,我仍然无法登录谷歌。