对于网站登录,我使用ServiceStack的身份验证特性和身份验证属性、CredentialsAuthProvider和UserAuth存储库。但是,在生产过程中,它工作得很好,我们将所有IIS主机放在一个负载平衡器后面,该负载平衡器只通过设计提供HTTPS服务(将端口443上的所有请求转发到IIS实例上的端口80 )。这就产生了一个问题--身份验证属性仅重定向到HTTP端口80上的登录页面(我认为是因为它只看到了代理请求Url,而不是原始的请求Url)。这会导致浏览器中的请求失败,因为负载均衡器不执行HTTP,也不将HTTP请求重定向到HTTPS。我们不能将IIS配置为也是HTTPS。
是否有办法使Auth提供者中的重定向始终是HTTPS?或者,Auth提供程序可以查看X转发-Proto的HTTP头来查看登录页面请求应该在HTTPS上吗?
发布于 2014-11-06 20:52:39
以下是Demis在ServiceStack客户论坛上的回复:
一些OAuth urls是在配置:https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#oauth-configuration中指定的 对于其他自动生成的Urls,可以将其设置为使用https: SetConfig(新HostConfig { UseHttpsLinks = true }); 它应该修改最新版本4.0.33中使用的BaseUrl。 您还可以重写
AppHost. ResolveAbsoluteUrl方法来内省/自定义urls。
以及我对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上)
https://stackoverflow.com/questions/26787984
复制相似问题