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 표현식을 빌드하는 방법을 학습하십시오.

프로시저
결과
SOAP 1.1 또는 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']