首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wsHttpBinding和XML签名

wsHttpBinding和XML签名
EN

Stack Overflow用户
提问于 2013-10-09 16:07:01
回答 1查看 1.3K关注 0票数 2

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

我知道WsHttpBinding有一些安全特性,MSDN上的WS-安全页面描述了Ws绑定协议WRT到SOAP的能力.

标识与消息相关的实体。 证明实体具有正确的组成员资格。 证明实体具有正确的访问权限集。 证明消息没有改变.

但我不知道最后那部分是怎么做的。看看我在WsHttpBinding上得到的SOAP响应,我看到了CipherData和CipherValue,但是研究让我相信这更多的是与实际的消息加密有关,而不是内容验证。我看到了一些类似于ValidateResponse和ValidateResult的东西,但这些空间看起来像是另一个端点用来验证信息的空间,一旦文件从这个服务中获得,这个产品就需要在没有连接到internet的设备上工作。

我知道理论上我可以把所有的数据放到一个变量中,然后SHA256它并告诉我的客户去做同样的过程,但这是肮脏的,非常不规范的。我觉得SOAP响应应该有相当于XML签名的签名,但通过搜索找不到任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-09 17:35:38

wsHttpBinding支持WS-Security,其中包括SOAP消息中的数字签名。要启用它,您需要在服务契约定义上使用ServiceContractAttribute.ProtectionLevelOperationContractAttribute.ProtectionLevel,而不是像您预期的那样在服务配置中执行它。

所以,在你的服务合同上:

代码语言:javascript
复制
  [ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
  public interface IMyServiceThatIWantToEncyptAndSign
  {
    ...
  }

代码语言:javascript
复制
  [ServiceContract(ProtectionLevel=ProtectionLevel.Sign)]
  public interface IMyServiceThatIWantToSign
  {
    ...
  }

代码语言:javascript
复制
[OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
string MyOperationThatIWantToEncryptAndSignSign(string msg);

代码语言:javascript
复制
[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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19277145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档