问题 如何通过HTTPS实现ServiceStack.net休息调用?


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

任何人都可以解释这个https部分如何工作或指向正确的方向?客户有责任确保通过https拨打电话吗?我是否需要执行涉及SSL证书的任何操作才能启用此功能?

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

编辑

任何人都可以引用如何在服务堆栈中完成此操作的具体示例。我认为我的api中的所有服务都需要HTTPS。我能使用请求过滤器完成此操作吗?


2965
2017-10-12 14:49


起源

我没有做出改变,但你可能想问一个跟进问题或用appharbor标记这个问题以提醒appharbor社区,他们非常有帮助。 - Dan


答案:


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

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


8
2017-10-12 15:00



谢谢(你的)信息。我想我需要更多关于在servicestack.net中实现这一点的信息。据我所知,我无法通过appharbor访问IIS中的这些设置。 - stephen776
@ stephen776-你能在servicestack上实现这个吗?鉴于它是几年前,您对SS和https的体验是什么? - Mark H


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

    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


2
2018-01-01 07:25