WS-Security の XPath 式の作成

JAX-RPC および JAX-WS WS-Security 構成は XML ベースの SOAP メッセージを使用して、アプリケーション間で情報を交換します。XPath 式を使用して、SOAP メッセージ内の署名または暗号化する特定のエレメントを選択できます。

始める前に

Simple Object Access Protocol (SOAP) メッセージ内のエレメントに対して署名または暗号化を行う場合は、XPath 式を使用して、メッセージ内の特定のエレメントを選択できます。SOAP 1.1 メッセージと SOAP 1.2 メッセージではフォーマットが異なるため、各バージョンのメッセージからエレメントを選択するには別個の XPath 式が必要になります。JAX-WS ランタイム環境では SOAP 1.1 と SOAP 1.2 の両方がサポートされるため、選択するエレメントごとに 2 つの XPath 式 (SOAP 1.1 用に 1 つ、SOAP 1.2 用に 1 つ) を WS-Security ポリシーに追加する必要があります。JAX-RPC ランタイム環境では SOAP 1.1 しかサポートされないため、WS-Security ポリシーに追加する必要があるのは、SOAP 1.1 バージョンの XPath 式のみです。

JAX-WS WS-Security 構成で SOAP メッセージから Timestamp エレメントを選択する以下のシナリオでは、SOAP 1.1 メッセージと SOAP 1.2 メッセージのフォーマットの違いにハイライトを当てます。

以下の例では、Timestamp エレメントが含まれた SOAP 1.1 メッセージを示します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsu:Timestamp wsu:Id="Timestamp-16" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsu:Created>2012-01-11T12:55:41.781Z</wsu:Created>
        <wsu:Expires>2012-01-11T15:42:21.781Z</wsu:Expires>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
</soapenv:Envelope>

以下の例では、Timestamp エレメントが含まれた SOAP 1.2 メッセージを示します。

<soapenv:Envelope xmlns:soapenv=" http://www.w3.org/2003/05/soap-envelope"> 
  <soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsu:Timestamp u:Id="uuid-169b0950-217e-48af-9057-ea832e0c7e19-14" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsu:Created>2009-09-08T14:08:36.224Z</wsu:Created>
        <wsu:Expires>2009-09-08T14:13:36.224Z</wsu:Expires>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
</soapenv:Envelope>

SOAP メッセージ・エレメントを選択する XPath 式は、XML デジタル署名の構成情報が含まれている、WS-Security のデフォルト・ポリシーに配置されます。JAX-WS WS-Security 構成では、XPath 式はペアで記述されます (サポートされる SOAP バージョンごとに 1 つの XPath 式)。

以下の例では、前の例の SOAP 1.1 メッセージと SOAP 1.2 メッセージから Timestamp エレメントを選択する XPath 式を示します。 最初の XPath 式は、SOAP 1.1 メッセージから Timestamp を選択します。2 番目の XPath 式は、SOAP 1.2 メッセージから Timestamp を選択します。

/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']

/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']

各バージョンの XPath 式の最初の 2 行は異なり、XPath 式の最後の 2 行は同じです。2 つの XPath 式の違いは、Envelope エレメントと Header エレメントの名前空間です。XPath 式の名前空間は、SOAP 1.1 メッセージと SOAP 1.2 メッセージの名前空間に対応しています。

このタスクについて

このタスクでは、WS-Security で署名または暗号化するエレメントを選択するために使用する XPath 式を作成する方法について説明します。JAX-WS セキュリティー構成では、SOAP 1.1 と SOAP 1.2 の両方にそれぞれ別個の XPath 式が必要ですが、JAX-RPC セキュリティー構成では、SOAP 1.1 用の XPath 式のみが必要になります。

WS-Security で一般的に使用される SOAP メッセージ・エレメントを選択する場合は、オプション 1 を参照して、事前作成されたコード・セグメントを使用して XPath 式を作成します。それ以外の場合は、オプション 2 に進んで、他のエレメント用のカスタム XPath 式の作成方法を参照してください。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): このタスクにおける XPath 式の例は、フォーマット設定および明瞭さのために、複数の行に分割して表示されています。完成した XPath 式を WS-Security に追加する際には、完全な XPath 式を単一行として入力する必要があります。gotcha

手順

  1. 事前作成されたコード・セグメントを使用して、一般的な XPath 式を作成します。
    1. SOAP セキュリティー・ヘッダーを指す、XPath 式の部分を作成します。
      • SOAP 1.1:
        /*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']
        /*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Header']
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
      • SOAP 1.2:
        /*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
        /*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
    2. 署名または暗号化するエレメントに対応する、XPath 式の部分を追加します。 以下のリストで、一般的に使用されるエレメントの XPath 式の行を示します。
      • UsernameToken
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='UsernameToken']
      • BinarySecurityToken (LTPA、X.509、Kerberos、など)
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='BinarySecurityToken']
      • SAML 1.1 アサーション (暗号化のみ)
        /*[namespace-uri()='urn:oasis:names:tc:SAML:1.0:assertion' and local-name()='Assertion']
      • SAML 2.0 アサーション (暗号化のみ)
        /*[namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion' and local-name()='Assertion'] 
      • セキュリティー・ヘッダー内の SecurityTokenReference (STR-Transform の場合)
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' 
        and local-name()='SecurityTokenReference']
      • Signature エレメント内の SecurityTokenReference
        /*[namespace-uri()='http://www.w3.org/2000/09/xmldsig#' and local-name()='Signature']
        /*[namespace-uri()='http://www.w3.org/2000/09/xmldsig#' and local-name()='KeyInfo']
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='SecurityTokenReference']
      • タイム・スタンプ
        /*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']
      • 署名 (暗号化のみ)
        /*[namespace-uri()='http://www.w3.org/2000/09/xmldsig#' and local-name()='Signature']
  2. カスタム XPath 式を作成します。
    1. SOAP メッセージの構造内で選択するエレメントを見つけます。

      例えば、以下の SOAP メッセージには、エレメント CreditCardNumber が含まれています。

      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Header>
          <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <ns1:myToken xmlns:ns1="http://token/space" value="tokenValue"/>
          </wsse:Security>
        </soapenv:Header>
        <soapenv:Body>
          <ns2:CreditCardNumber xmlns:ns2="http://bank/space" value="1234"/>
        </soapenv:Body>
      </soapenv:Envelope>

      CreditCardNumber を選択する場合は、そのまわりの SOAP メッセージのエレメントのみを分離します。以下の例では、CreditCardNumber の選択に関連した、SOAP メッセージの構造を示します。

      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Body>
          <ns2:CreditCardNumber xmlns:ns2="http://bank/space" value="1234"/>
        </soapenv:Body>
      </soapenv:Envelope>
    2. ターゲット・エレメントが含まれている SOAP メッセージ構造内の各エレメントに対して 1 つの XPath セグメントを作成します。 各 XPath セグメントには、以下のフォーマットで記述された、対応するエレメントの名前空間とローカル名が含まれている必要があります。
      /*[namespace-uri()='http://namespace/url' and local-name()='ElementName']

      例えば、以下の XPath セグメントは、前のステップの例の Envelope エレメントに対応しています。

      /*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']

      エレメントに名前空間が含まれていない場合は、そのエレメントを含むエレメントの名前空間が継承されます。例えば、Body エレメントは、Envelope エレメントの名前空間を使用します。

    3. XPath セグメントを 1 つの完全な式に結合します。 セグメントは、最外部のエレメントから最内部のエレメント (選択するエレメント) の順序にする必要があります。

      以下の例では、最初のステップの例の CreditCardNumber エレメントを選択する完全な XPath 式を示します。

      /*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']
      /*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Body']/*[namespace-uri()='http://bank/space' and local-name()='CreditCardNumber']

タスクの結果

SOAP 1.1 メッセージ・ヘッダーまたは SOAP 1.2 メッセージ・ヘッダーのエレメントを選択する XPath 式を作成しました。

以下の例では、UsernameToken を選択する完全な SOAP 1.2 XPath 式を示します。
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='UsernameToken']

次のタスク

完全な XPath 式を WS-Security ポリシー構成に単一テキスト行として入力します。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_wssec_xpath
ファイル名:twbs_wssec_xpath.html