5장. WS-Policy Framework
초록
이 장에서는 WS-Policy 프레임워크의 기본 개념, 정책 제목 및 정책 어설션 정의, 정책 어설션을 결합하여 정책 표현식을 만드는 방법을 설명합니다.
5.1. WS-Policy 소개
5.1.1. 개요
WS-Policy 사양 은 웹 서비스 애플리케이션에서 런타임 시 연결 및 통신의 의미 체계를 수정하는 정책을 적용하기 위한 일반적인 프레임워크를 제공합니다. Apache CXF 보안은 WS-Policy 프레임워크를 사용하여 메시지 보호 및 인증 요구 사항을 구성합니다.
5.1.2. 정책 및 정책 참조
정책을 지정하는 가장 간단한 방법은 정책을 적용하려는 위치에 직접 포함하는 것입니다. 예를 들어 WSDL 계약의 특정 포트와 정책을 연결하려면 다음과 같이 지정할 수 있습니다.
<wsdl:definitions targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... > ... <wsdl:service name="PingService10"> <wsdl:port name="UserNameOverTransport_IPingService" binding="BindingName"> <wsp:Policy> <!-- Policy expression comes here! --> </wsp:Policy> <soap:address location="SOAPAddress"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
정책을 지정하는 다른 방법은 정책을 적용하려는 시점에 정책 참조 요소 wsp:PolicyReference
를 삽입한 다음 XML 파일의 다른 시점에 정책 요소 wsp:Policy
를 삽입하는 것입니다. 예를 들어 정책 참조를 사용하여 정책을 특정 포트와 연결하려면 다음과 같은 구성을 사용할 수 있습니다.
<wsdl:definitions targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... > ... <wsdl:service name="PingService10"> <wsdl:port name="UserNameOverTransport_IPingService" binding="BindingName"> <wsp:PolicyReference URI="#PolicyID"/> <soap:address location="SOAPAddress"/> </wsdl:port> </wsdl:service> ... <wsp:Policy wsu:Id="PolicyID"> <!-- Policy expression comes here ... --> </wsp:Policy> </wsdl:definitions>
정책 참조인 wsp:PolicyReference
가 ID, PolicyID 를 사용하여 참조된 정책을 찾습니다( URI
특성에 #
접두사 문자가 추가됨). 정책 자체인 wsp:Policy
는 속성 wsu:Id="PolicyID"
를 추가하여 식별해야 합니다.
5.1.3. 정책 주체
정책이 연결된 엔터티를 정책 주체 라고 합니다. 예를 들어 정책을 끝점과 연결할 수 있으며, 이 경우 끝점 은 정책 제목입니다. 지정된 정책 제목과 여러 정책을 연결할 수 있습니다. WS-Policy 프레임워크는 다음과 같은 종류의 정책 주체를 지원합니다.
5.1.4. 서비스 정책 제목
정책을 서비스와 연결하려면 < wsp:Policy
> 요소 또는 < wsp:PolicyReference
> 요소를 다음 WSDL 1.1 요소의 하위 요소로 삽입합니다.
-
WSDL:service
-이 서비스에서 제공하는 모든 포트(endpoints)에 정책을 적용합니다.
5.1.5. 끝점 정책 제목
정책을 끝점과 연결하려면 < wsp:Policy
> 요소 또는 < wsp:PolicyReference
> 요소를 다음 WSDL 1.1 요소의 하위 요소로 삽입합니다.
-
WSDL:portType
-이 포트 유형을 사용하는 모든 포트(endpoints)에 정책을 적용합니다. -
WSDL:binding
-이 바인딩을 사용하는 모든 포트에 정책을 적용합니다. -
WSDL:port
-이 끝점에만 정책을 적용합니다.
예를 들어 정책 참조를 사용하여 정책을 끝점 바인딩과 연결할 수 있습니다.
<wsdl:definitions targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... > ... <wsdl:binding name="EndpointBinding" type="i0:IPingService"> <wsp:PolicyReference URI="#PolicyID"/> ... </wsdl:binding> ... <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy> ... </wsdl:definitions>
5.1.6. 운영 정책 제목
정책을 작업과 연결하려면 < wsp:Policy
> 요소 또는 < wsp:PolicyReference
> 요소를 다음 WSDL 1.1 요소의 하위 요소로 삽입합니다.
-
wsdl:portType/wsdl:operation
-
wsdl:binding/wsdl:operation
예를 들어 정책 참조를 사용하여 다음과 같이 바인딩의 작업과 정책을 연결할 수 있습니다.
<wsdl:definitions targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... > ... <wsdl:binding name="EndpointBinding" type="i0:IPingService"> <wsdl:operation name="Ping"> <wsp:PolicyReference URI="#PolicyID"/> <soap:operation soapAction="http://xmlsoap.org/Ping" style="document"/> <wsdl:input name="PingRequest"> ... </wsdl:input> <wsdl:output name="PingResponse"> ... </wsdl:output> </wsdl:operation> ... </wsdl:binding> ... <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy> ... </wsdl:definitions>
5.1.7. 메시지 정책 제목
정책을 메시지와 연결하려면 < wsp:Policy
> 요소 또는 < wsp:PolicyReference
> 요소를 다음 WSDL 1.1 요소의 하위 요소로 삽입합니다.
-
wsdl:message
-
wsdl:portType/wsdl:operation/wsdl:input
-
wsdl:portType/wsdl:operation/wsdl:output
-
wsdl:portType/wsdl:operation/wsdl:fault
-
wsdl:binding/wsdl:operation/wsdl:input
-
wsdl:binding/wsdl:operation/wsdl:output
-
wsdl:binding/wsdl:operation/wsdl:fault
예를 들어 정책 참조를 사용하여 다음과 같이 바인딩의 메시지와 정책을 연결할 수 있습니다.
<wsdl:definitions targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... > ... <wsdl:binding name="EndpointBinding" type="i0:IPingService"> <wsdl:operation name="Ping"> <soap:operation soapAction="http://xmlsoap.org/Ping" style="document"/> <wsdl:input name="PingRequest"> <wsp:PolicyReference URI="#PolicyID"/> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="PingResponse"> ... </wsdl:output> </wsdl:operation> ... </wsdl:binding> ... <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy> ... </wsdl:definitions>