我想通过 HTTPS 使用基本身份验证对我的 servicestack.net 休息服务的用户进行身份验证。
任何人都可以解释这部分的 https 部分将如何工作或为我指明正确的方向吗?客户是否有责任确保通过 https 进行调用?我需要做任何涉及 SSL 证书的事情来启用它吗?
如果这很重要,这项服务很可能会在 AppHarbor 上运行。
编辑
任何人都可以引用如何在服务堆栈中完成此任务的具体示例。我认为我的 api 中的所有服务都需要 HTTPS。我可以使用请求过滤器来完成这个吗?
我想通过 HTTPS 使用基本身份验证对我的 servicestack.net 休息服务的用户进行身份验证。
任何人都可以解释这部分的 https 部分将如何工作或为我指明正确的方向吗?客户是否有责任确保通过 https 进行调用?我需要做任何涉及 SSL 证书的事情来启用它吗?
如果这很重要,这项服务很可能会在 AppHarbor 上运行。
编辑
任何人都可以引用如何在服务堆栈中完成此任务的具体示例。我认为我的 api 中的所有服务都需要 HTTPS。我可以使用请求过滤器来完成这个吗?
您将需要购买并安装 SSL 证书以处理 https(您应该能够从您的域名提供商处获得一个,然后您需要将其安装在您的托管服务器上)。服务客户端通常可以通过他们选择的任何方法进行连接。如果他们尝试通过 http 连接,而不是允许他们访问,您有责任停止请求并向客户端生成错误消息。
Request.Url.Scheme您可以通过检查REST 服务 API 中的属性来验证它们是在 http 还是 https 。通常,对需要 https 的服务的 http 请求将返回 HTTP 403(禁止)状态代码。如果您可以访问 IIS,则无需进行任何编码即可轻松强制使用 HTTPS:http ://www.sslshopper.com/iis7-redirect-http-to-https.html
如果您不需要所有服务,则需要安全性的任何服务顶部的以下内容都可以完成这项工作:
if (!Request.IsSecureConnection)
{
throw new HttpError(HttpStatusCode.Forbidden,"403","HTTPS ONLY");
}
但是,最好将此作为过滤器属性:https ://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes
如果您希望全局使用,您可以将属性应用于共享 BaseService 或更好地使用全局过滤器:https ://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters
...像这样:
this.GlobalRequestFilters.Add((req, res, dto) =>
{
if (!req.IsSecureConnection)
{
res.StatusCode = (int)HttpStatusCode.Forbidden;
res.Close();
}
});
如果您想要重定向到 https 而不是拒绝请求,那么您可以基于此:http ://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers