3

WCF では、次のような SOAP ヘッダーを確保する必要があります。

<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 契約に設定しました)

誰かがこれにスキルを持っているなら、私は非常に感謝します。

4

1 に答える 1

1

私は WCF について何も知らないので、これは闇の中のショットですが、SOAP メッセージ署名については知っています。

SOAP body 要素の属性「Id」または「wsu:Id」は必須です。署名は、署名されるデータの参照としてその Id を使用します。投稿した例では、これは wsu:Timestamp 要素で行われています - ID は

wsu:Id="Timestamp-1"

そして、署名はそれを参照として使用します。

 <ds:Reference URI="#Timestamp-1">

また、この例では、署名は次のものも参照しています。

 <ds:Reference URI="#id-3">

これは、例の本体のIDだと思います。

ツールキットの API がどのように Id をアタッチするかはわかりませんが、署名するものには間違いなく必要です。

EncodingType と ValueType は少し複雑です。私は頭の上からそれを知らないのではないかと心配しています。私の誘惑は、ID を正しく取得してから、すべてが適切に機能するかどうかを確認することです。かもしれない。

于 2009-10-28T18:09:59.783 に答える