【发布时间】: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