2017-02-28 120 views
3

在WCF中,ProtectionLevel是一个相当重要的概念。保护级别控制消息的加密和签名方式。WCF设置绑定的保护级别?

据我所知,设置保护级别的唯一方法是将属性应用于代码,可用于设置属性的最大范围是使用服务合约接口上的ServiceContract属性。

例如,您将服务合同界面代码分发给第三方的情况。即您手中的第三方*.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文件或代码)配置的。

我的问题:

  • 为什么不能直接设置的保护级别上的绑定? (或其他范围比服务合同范围更宽)
  • 或者也许这是可能的?如果是这样,怎么样?

一些文档链接:

回答

1

为什么不能直接设置的保护级别上 约束力? (或其他范围比服务合同范围更宽)

在代码中指定保护级别是指服务开发人员可以指示整个服务或某个服务操作需要最低级别的安全。就其本身而言,保护级别不提供任何安全性。

绑定通过提供消息级别的加密和/或传输级别加密来提供实际的安全性,具体取决于绑定。

绑定通过绑定配置实例(在代码或配置中定义)在服务合同范围上应用。当一个绑定配置实例启用了消息级加密时,它将查阅服务合同,查看开发者是否已经指出了所需的最低级别的保护。如果它找到指定的保护级别,那么它最好应用指定的安全级别。请注意,根据所选的绑定,这可能不可行。

现在想象一下,有人希望在各种 方案中使用此服务合同。在一种情况下,用户希望使用签名的 消息进行通信(不加密)。在另一种情况下,用户需要 签名和加密。

现在,如果我理解正确,用户将需要两个服务 合同,一个具有保护级别Sign,另一个具有保护 级别的SignAndEncrypt。

这是不正确的。如果绑定配置实例启用了消息级安全性,并且未找到服务合同中定义的任何保护级别,则默认情况下它将通过消息加密保护所有服务的通信。如果绑定配置实例没有启用消息级安全性,则不会。所以你不需要两个服务契约,只需要两个绑定配置实例。

+0

好的我想我明白了。但是想象一下这种情况: 一)信息安全 b)一个单一的服务合同 三)我想用签名和加密 d调用服务的一个)我想用签名只 我将如何指定调用服务中有两个c)和d)之间的区别? – codeape

+0

@codeape - 我想我应该正确地阅读你的问题。在这种情况下,是的,你是对的。除非你有两个不同的服务合同,否则对于你的具体情况是没有办法的。但是,我会猜测这是一个纯粹设计的场景,而不是你正在面对的实际场景? –

+0

是的你是对的,这是我试图理解WCF。我不断调整绑定配置,并在提琴手中查看请求和响应。你有任何关于WCF博客,书籍或其他资源的深入探讨事实真相的技巧吗?国际海事组织,WCF文件太高。 – codeape