在使用传输安全性的同时为多个消息ProtectionLevel配置服务

本文关键字:消息 ProtectionLevel 服务 配置 传输 安全性 | 更新日期: 2023-09-27 18:29:02

我有一个WCF服务,我想对其使用消息签名,但仅用于某些调用,其余的不应该签名。我不知道如何设置它来支持两者

消息签名使用非windows用户名和密码,该用户名和密码由服务端的用户名密码验证器验证。已签名和未签名的消息都应使用传输安全性。

下面是我的界面示例:

[ServiceContract(ProtectionLevel=ProtectionLevel.None)]
public interface ISecTest
{
    [OperationContract(ProtectionLevel = ProtectionLevel.Sign)]
    string GetData(string value);
    [OperationContract(ProtectionLevel = ProtectionLevel.None)]
    string GetStuff(string stuff);
}

我遇到的问题是,签名似乎完全基于服务的绑定配置,而不是接口上定义的ProtectionLevels

如果我使用以下绑定,两个调用都需要用户名凭据,而不考虑ProtectionLevel属性:

<wsHttpBinding>
    <binding name="secureWSHttpBindingConfig">          
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>

如果我省略了消息安全性并使用以下绑定,则两个调用都不需要凭据:

<wsHttpBinding>
    <binding name="tolerantWSHttpBindingConfig">
      <security mode="Transport">           
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>

除了使用消息安全性之外,还使用传输安全性,这是否会造成复杂性?关于如何在一项服务中实现这一点(如果可能的话),有什么建议吗?

谢谢!

在使用传输安全性的同时为多个消息ProtectionLevel配置服务

使用传输安全性时,不能混合保护级别。如果这对你来说很重要,你就必须使用消息安全性。