【发布时间】:2017-02-28 10:18:02
【问题描述】:
在 WCF 中,ProtectionLevel 是一个相当重要的概念。保护级别控制如何/是否对消息进行加密和签名。
据我了解,设置保护级别的唯一方法是对代码应用属性,可用于设置属性的最广泛范围是使用服务合约接口上的ServiceContract 属性。
例如,您将服务合同接口代码分发给第三方的情况。 IE。你交给第三方一个*.cs 文件,其中包含:
// inside this attribute is where you put ProtectionLevel = ...
[ServiceContract(Namespace = "some:name:space")]
public interface IMyService
{
[OperationContract(Action = "...", ReplyAction = "...")]
Message MyOperation(Message request);
}
现在假设有人想在各种场景中使用此服务合同。在一种情况下,用户希望使用签名消息(不加密)进行通信。在另一种情况下,用户需要签名和加密。
现在,如果我理解正确,用户将需要两份服务合同,一份保护级别为Sign,一份保护级别为SignAndEncrypt。
在我看来,这种设计有点奇怪:毕竟,大多数 WCF 安全设置都是在绑定级别配置的(通过 .config 文件或在代码中)。
我的问题:
- 为什么不能直接在绑定上设置保护级别? (或比服务合同范围更广的其他范围)
- 或许有可能?如果有,怎么做?
一些文档链接:
【问题讨论】: