是否有关于[Restrict]
属性与服务堆栈一起使用的文档?
没有找到任何文件,我开始尝试解决这个问题。我发现你必须在AppHost.cs配置事件中使用
启用限制var endpointHostConfig = new EndpointHostConfig
{
EnableAccessRestrictions = true,
};
然后我在我的请求DTO中添加了属性:
[Route("Hello/World", "GET")]
[Restrict(EndpointAttributes.InternalNetworkAccess)]
这不起作用......看起来会删除所有“默认”限制并用一个限制替换它?使用它似乎工作:
[Restrict(InternalOnly = true)]
当我从本地局域网执行GET时,它可以正常工作,但是从远程它不能。有趣的是,它从远程提供的“详细堆栈错误”是:
未达到以下限制:'\ n - [InternalNetworkAccess,Secure,HttpHead,HttpPost,HttpPut,HttpDelete, HttpOther,OneWay,Soap11,Soap12,Xml,Jsv,ProtoBuf,Csv,Html,Yaml,MsgPack,FormatOther,AnyEndpoint]'
注意,它甚至没有列出HttpGet作为可能性之一 - 这确实有效。还提到了Secure而不是InSecure ......我都没有特别要求。
我们能否澄清一下它应该如何运作?如果我想要SSL,该怎么办?
如果我想在生产中要求SSL,但不为此端点的所有服务暂存,该怎么办? (实现这可能是一种完全不同的配置方式)。
答案 0 :(得分:1)
[Restrict]
属性功能位于最新版本的ServiceStack中。目前,唯一的文档存在于Security wiki page。
以下是一些测试限制属性验证的EndpointAttributes restrictions tests,以及您可以使用的一些different service configurations。
它的工作方式是它仅限于指定的任何内容,因此如果您想启用SSL并将其他所有内容保持为不受限制,则只需添加:
[Restrict(EndpointAttributes.Secure)]
public class SslOnly { }
它还支持指定允许的多种环境组合,例如:您可以在内部强制执行HTTP,但在外部使用HTTPS强制执行:
[Restrict(EndpointAttributes.Secure | EndpointAttributes.External,
EndpointAttributes.InSecure | EndpointAttributes.InternalNetworkAccess)]
public class SslExternalAndInsecureInternal { }
注意:每个环境都与Enum标志结合,并用,
分隔。
但它不允许您区分调试版本和发布版本,为此,您需要使用C#条件编译符号。
例如,只允许用于Debug版本的HTTP和用于生产版本的HTTPS:
#if DEBUG
[Restrict(EndpointAttributes.InSecure)]
#else
[Restrict(EndpointAttributes.Secure)]
#endif
public class MyRequestDto { ... }