WS-Security에 대한 XPath 표현식 빌드

JAX-RPC 및 JAX-WS WS-Security 구성은 XML 기반 SOAP 메시지를 사용하여 애플리케이션 사이에서 정보를 교환합니다. XPath 표현식을 사용하여 SOAP 메시지에서 서명 또는 암호화할 특정 요소를 선택할 수 있습니다.

시작하기 전에

SOAP(Simple Object Access Protocol) 메시지에서 요소에 서명 또는 암호화하려는 경우 XPath 표현식을 사용하여 메시지의 특정 요소를 선택할 수 있습니다. SOAP 1.1 및 SOAP 1.2 메시지는 형식이 다르므로 각 메시지 버전에서 요소를 선택할 별도의 XPath 표현식이 필요합니다. JAX-WS 런타임 환경은 SOAP 1.1 및 SOAP 1.2를 지원하므로, SOAP 1.1 및 SOAP 1.2에 대해 각각 하나씩 선택하려는 각 요소에 대한 WS-Security 정책에 두 개의 XPath 표현식을 추가해야 합니다. JAX-RPC 런타임 환경은 SOAP 1.1만 지원하므로 WS-Security 정책에 XPath 표현식의 SOAP 1.1 버전만 추가해야 합니다.

SOAP 1.1 및 SOAP 1.2 메시지의 형식 차이는 JAX-WS WS-Security 구성에 있는 SOAP 메시지에서 시간소인 요소를 선택하는 다음 시나리오에서 강조표시됩니다.

다음 예제는 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의 각 지원되는 버전에 대해 하나의 XPath 표현식 포함).

다음 예제는 이전 예제의 SOAP 1.1 및 SOAP 1.2 메시지에서 Timestamp 요소를 선택하는 XPath 표현식을 보여줍니다. 첫 번째 XPath 표현식은 SOAP 1.1 메시지에서 Timestamp를 선택하고 두 번째 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 표현식의 처음 두 행은 서로 다르며, XPath 표현식의 마지막 두 행은 동일합니다. 두 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 메시지 요소를 선택하려는 경우 미리 빌드된 코드 세그먼트를 사용하여 XPath 표현식을 빌드하려면 옵션 1을 참조하십시오. 그렇지 않으면 옵션 2로 진행하여 다른 요소에 대해 사용자 정의 XPath 표현식을 빌드하는 방법을 학습하십시오.

문제점 방지 문제점 방지: 이 태스크에서 XPath 표현식 예제는 형식화 및 명확한 이해를 위해 여러 행으로 표시됩니다. WS-Security에 완료된 XPath 표현식을 추가하면 단일 행으로 전체 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']
      • Timestamp
        /*[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 메시지 구조에서 각 요소에 대해 하나의 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 세그먼트를 전체 표현식으로 결합하십시오. 세그먼트는 가장 바깥쪽 요소에서 선택하는 요소에 해당하는 가장 안쪽 요소로 정렬되어야 합니다.

      다음 예제는 첫 번째 단계에 나온 예제에서 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