首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SSL传输的消息中的安全令牌

通过SSL传输的消息中的安全令牌
EN

Stack Overflow用户
提问于 2009-10-27 16:44:52
回答 1查看 1.2K关注 0票数 3

我需要在WCF中确保soap头像这样:

代码语言:javascript
复制
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header>
 <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
  <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-1D82AB9733B359236712457035776561"></wsse:BinarySecurityToken>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-2">
    <ds:SignedInfo>
     <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <ds:Reference URI="#Timestamp-1">
      <ds:Transforms>
       <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      </ds:Transforms>       <ds:DigestMethodAlgorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
      <ds:DigestValue>
      </ds:DigestValue>
     </ds:Reference>
     <ds:Reference URI="#id-3">
      <ds:Transforms>
       <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      </ds:Transforms>
      <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
      <ds:DigestValue>
      </ds:DigestValue>
     </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
    </ds:SignatureValue>
    <ds:KeyInfo Id="KeyId-1D82AB9733B359236712457035776562">
<wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-1D82AB9733B359236712457035776563">
     <wsse:Reference URI="#CertId-1D82AB9733B359236712457035776561" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
     </wsse:SecurityTokenReference>
    </ds:KeyInfo>
   </ds:Signature>
   <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1">
    <wsu:Created>2009-06-22T20:46:17Z
    </wsu:Created>
    <wsu:Expires>2009-06-22T20:51:17Z
    </wsu:Expires>
   </wsu:Timestamp>
  </wsse:Security>
 </SOAP-ENV:Header>

其中,时间戳和正文部分/元素将由消息中包含的直接引用证书(BinarySecurityToken)进行数字签名,并且机密性仅在传输层上由SSL(IIS托管服务)确保。目前我正在使用类TransportSecurityBindingElement和HttpsTransportBinding,但是我不能像我想要的那样获得soap头……问题是(根据消息跟踪) BinarySecurityToken元素中缺少id、EncodingType、ValueType等属性,并且消息体没有签名(我将ProtectionLevel设置为Sign in contract)

因此,如果有人有这方面的技能,我将非常感激。

EN

回答 1

Stack Overflow用户

发布于 2009-10-29 02:10:00

这是一个在黑暗中拍摄,因为我不知道任何WCF,但我知道SOAP消息签名。

必备项是SOAP主体元素中的属性"Id“或"wsu:Id”。签名将使用该Id作为正在签名的数据的引用。在您发布的示例中,这是在wsu:Timestamp元素上完成的--它的id为

代码语言:javascript
复制
wsu:Id="Timestamp-1"

然后签名使用它作为参考:

代码语言:javascript
复制
 <ds:Reference URI="#Timestamp-1">

在这个例子中,签名还引用了:

代码语言:javascript
复制
 <ds:Reference URI="#id-3">

我假设它是示例主体的id。

我不确定你的工具包的API如何附加it,但你签名的任何东西都肯定需要它。

EncodingType和ValueType稍微有点棘手。恐怕我一点也不知道那件事。我的诱惑是尝试获得正确的if,然后看看是否一切都到位了。有可能。

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

https://stackoverflow.com/questions/1629470

复制
相关文章

相似问题

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