【问题标题】:With ServiceStack Auth, is there a way to make the redirects always be HTTPS?使用 ServiceStack Auth,有没有办法让重定向始终是 HTTPS?
【发布时间】:2015-01-03 11:05:26
【问题描述】:

对于网站登录,我正在使用带有 Authenticate 属性、CredentialsAuthProvider 和 UserAuth 存储库的 ServiceStack 的身份验证功能。它工作得很好,但是,在生产中,我们将所有 IIS 主机放在一个负载均衡器后面,该负载均衡器设计为仅服务于 HTTPS(将端口 443 上的所有请求转发到 IIS 实例上的端口 80)。这会产生一个问题 - Authenticate 属性仅重定向到 HTTP 端口 80 上的登录页面(我认为是因为它只看到代理的请求 Url,而不是原始的)。这会导致浏览器中的请求失败,因为负载均衡器不执行 HTTP,也不会将 HTTP 请求重定向到 HTTPS。我们不能将 IIS 也配置为仅 HTTPS。

有没有办法让 Auth 提供程序中的重定向始终是 HTTPS?或者,Auth 提供者是否可以查看 X-Forwarded-Proto 的 HTTP 标头以查看登录页面请求是否应该通过 HTTPS?

【问题讨论】:

    标签: asp.net authentication https servicestack load-balancing


    【解决方案1】:

    这是 Demis Bellot 在 ServiceStack 客户论坛上的回复:

    配置中指定了一些 OAuth url: https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#oauth-configuration

    对于其他自动生成的 Url,您可以将其设置为使用 https:

    SetConfig(new HostConfig { 
        UseHttpsLinks = true
    });
    

    这应该修改最新 v4.0.33 版本中使用的 BaseUrl。

    您还可以覆盖AppHost. ResolveAbsoluteUrl 方法以 内省/自定义网址。

    以及我对 AppHost.ResolveAbsoluteUrl 覆盖的实现

    public override string ResolveAbsoluteUrl(string virtualPath, IRequest httpReq)
    {
        virtualPath = virtualPath.SanitizedVirtualPath();
        var absoluteUrl = httpReq.GetAbsoluteUrl(virtualPath);
    
        return httpReq.Headers["X-Forwarded-Proto"] != null
            && httpReq.Headers["X-Forwarded-Proto"].Equals("https", StringComparison.InvariantCultureIgnoreCase)
            ? absoluteUrl.Replace("http://", "https://") : absoluteUrl;
    }
    

    (顺便说一下,负载均衡器和实例在 AWS)

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2021-05-08
      • 2020-09-03
      • 2020-03-24
      • 2010-12-22
      相关资源
      最近更新 更多