【问题标题】:WCF wsHttpBinding and XML SignaturesWCF wsHttpBinding 和 XML 签名
【发布时间】:2013-10-09 16:07:01
【问题描述】:

我有一个响应许可信息的 WCF SOAP 服务。客户端将保存 SOAP 响应并在每次程序加载时加载它,验证用户未超过到期日期等。因此,响应的要求之一是具有签名,以便客户端可以运行数据通过某种加密算法,并根据发送的签名检查结果,以验证文件没有任何更改。这不是什么新鲜事,这是XML signing。但是,该服务是使用 DataContractSerializer 编写的,因此我不能只获取数据,创建 XML 签名,然后将其直接注入 SOAP 响应中。

我知道 WsHttpBinding 有一些安全特性,MSDN 上的WS-Security page 将 Ws 绑定协议 WRT 描述为 SOAP 具有...

识别与消息相关的一个或多个实体。

证明实体具有正确的组成员身份。

证明实体具有正确的访问权限集。

证明消息没有改变。

但我无法准确找到最后一部分是如何完成的。查看打开 WsHttpBinding 时得到的 SOAP 响应,我看到了 CipherData 和 CipherValue,但研究这让我相信这更多地与实际消息加密有关,而不是内容验证。我看到了 ValidateResponse 和 ValidateResult 之类的东西,但它们看起来像是供另一个端点验证信息的空间,并且一旦从该服务获取文件,该产品就需要在未连接到 Internet 的设备上工作。

我知道理论上我可以将所有数据放入一个变量并对其进行 SHA256 处理,然后告诉我的客户执行相同的过程,但这很脏而且非常不标准化。我觉得应该有一个等效于 SOAP 响应的 XML 签名,但我无法通过搜索找到任何东西。

【问题讨论】:

  • 我怀疑它“证明消息没有改变”,否则它不能用你的密钥正确解密。
  • 这是不正确的。根据 WS-Security 规范。它确实在 SOAP 消息中包含正确的数字签名。

标签: c# xml wcf web-services soap


【解决方案1】:

wsHttpBinding 支持 WS-Security,它在 SOAP 消息中包含数字签名。要启用它,您需要在服务合同定义中使用ServiceContractAttribute.ProtectionLevelOperationContractAttribute.ProtectionLevel,而不是像您期望的那样在服务配置中执行此操作

所以,根据您的服务合同:

  [ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
  public interface IMyServiceThatIWantToEncyptAndSign
  {
    ...
  }

  [ServiceContract(ProtectionLevel=ProtectionLevel.Sign)]
  public interface IMyServiceThatIWantToSign
  {
    ...
  }

[OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
string MyOperationThatIWantToEncryptAndSignSign(string msg);

[OperationContract(ProtectionLevel=ProtectionLevel.Sign)]
string MyOperationThatIWantToSign(string msg);

默认值为ProtectionLevel.None,这就是我认为您没有看到任何签名的原因。

服务合同的相关 MSDN 链接在这里:

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx

这里是运营合同:

http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx

【讨论】:

  • 好!然后我会删除免责声明;o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多