【问题标题】:How can I implement ServiceStack.net rest call over HTTPS?如何通过 HTTPS 实现 ServiceStack.net 休息调用?
【发布时间】:2011-12-06 05:15:21
【问题描述】:

我想通过 HTTPS 使用基本身份验证来验证我的 servicestack.net 休息服务的用户。

谁能解释一下这部分的 https 部分是如何工作的或为我指明正确的方向?客户是否有责任确保通过 https 进行调用?我需要做任何涉及 SSL 证书的事情来启用它吗?

如果重要的话,这项服务很可能会在 AppHarbor 上运行。

编辑

任何人都可以举出具体的例子来说明如何在服务堆栈中实现这一点。我认为我的 api 中的所有服务都需要 HTTPS。我可以使用请求过滤器来完成此操作吗?

【问题讨论】:

  • 我没有做出改变,但你可能想问一个后续问题或用 appharbor 标记这个问题以提醒 appharbor 社区,它们非常有帮助。

标签: c# asp.net asp.net-mvc appharbor servicestack


【解决方案1】:

您需要购买并安装 SSL 证书以处理 https(您应该能够从您的域名提供商处获得一个,然后您需要将其安装在您的托管服务器上)。服务客户端通常可以通过他们选择的任何方法进行连接。如果客户端尝试通过 http 连接,而不是允许他们访问,则您有责任停止请求并向客户端生成错误消息。

您可以通过检查 REST 服务 API 中的 Request.Url.Scheme 属性来验证它们是在 http 还是 https。通常,对需要 https 的服务的 http 请求将返回 HTTP 403(禁止)状态代码。如果您可以访问 IIS,则无需进行任何编码即可轻松强制 HTTPS:http://www.sslshopper.com/iis7-redirect-http-to-https.html

【讨论】:

  • 感谢您的信息。我想我需要更多关于在 servicestack.net 中实现这一点的信息。据我所知,我无法通过 appharbor 访问 IIS 中的这些设置。
  • @stephen776- 你能在 servicestack 上实现这个吗?鉴于是几年前的事了,您对 SS 和 https 的体验如何?
【解决方案2】:

如果您不需要所有服务,则在需要安全性的任何服务的顶部都需要以下内容:

    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

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2014-08-21
    • 2013-03-26
    • 2018-02-05
    相关资源
    最近更新 更多