웹 서비스 보안 대화의 범위 지정
웹 서비스 보안 대화는 기본값과 JAX-WS(Java™ API for XML Web Services) 클라이언트 서비스 레벨의 두 가지 범위 지정 메커니즘을 지원합니다.
두 범위 지정 메커니즘에 대한 다음 정보를 검토하여 WebSphere® Application Server의 보안 대화 및 정책 세트의 적절한 범위 지정을 확인하십시오.
Default
기본 범위는 클러스터, 애플리케이션, 모듈 및 대상 서비스 엔드포인트에 기초를 두고 있습니다. 씬 클라이언트 환경에서 실행 중인 클라이언트의 경우, 단일 애플리케이션, 클러스터 및 모듈로 간주됩니다.
이 범위 지정 모드에서 동일한 대상 서비스 엔드포인트에 대한 특정 애플리케이션, 클러스터 및 모듈 내의 모든 JAX-WS 클라이언트 인스턴스가 동일한 보안 대화를 공유합니다. 예를 들어, 다음 그림에서 두 클라이언트 인스턴스(클라이언트 1 및 클라이언트 2)는 동일한 모듈에 있습니다. 클라이언트 1과 클라이언트 2는 서비스 1과의 동일한 보안 대화를 공유합니다. 다른 두 클라이언트 인스턴스(클라이언트 3 및 클라이언트 4)는 클라이언트 1 및 2와 다른 모듈에 있으며 서로 보안 대화를 공유하나 클라이언트 1 및 2와 공유하지는 않습니다.
JAX-WS 클라이언트 서비스 레벨
JAX-WS 클라이언트 서비스 레벨의 범위는 클라이언트 애플리케이션 요청(애플리케이션 아웃바운드)에 보안 대화 토큰(SCT)의 토큰 생성기 바인딩 구성 특성을 지정하여 사용 가능합니다. 바인딩은 배치된 애플리케이션의 META-INF에 있습니다.
$PROFILE_DIR/config/cells/<cellname>/WSSampleClientBeta.ear/deployments/WSSampleClientBeta
/META-INF/SecureConversation123binding/PolicyTypes/WSSecurity/bindings.xml.
구성의 예제는 다음과 같습니다.
<tokenGenerator name="gen_enctgen"
classname="com.ibm.ws.wssecurity.wssapi.token.impl.CommonTokenGenerator">
<valueType localName="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" uri="" />
<callbackHandler classname="com.ibm.ws.wssecurity.impl.auth.callback.WSTrustCallbackHandler">
<properties name="com.ibm.ws.wssecurity.sc.SCTScope" value="SERVICE_SCOPE"/>
</callbackHandler>
<properties name="com.ibm.ws.wssecurity.sc.dkt.ServiceLabel" value="WSC"/>
<properties name="com.ibm.ws.wssecurity.sc.dkt.ClientLabel" value="WSC"/>
<jAASConfig configName="system.wss.generate.sct"/>
</tokenGenerator>
다음 코드 예제는 클라이언트 애플리케이션 요청(애플리케이션 아웃바운드)에서 SCT의 토큰 생성기 바인딩 구성 특성이 사용 가능하게 된 후의 동작을 보여줍니다. 이 모드에서 웹 서비스 보안 대화는 JAX-WS 클라이언트 서비스 인스턴스에서 범위가 지정됩니다.
QName serviceQname = new QName("http://ws.apache.org/axis2", "EchoService");
QName portQname = new QName("http://ws.apache.org/axis2", "EchoServicePort");
String endpointUrl = "http://myhost/......";
Service svc1 = Service.create(serviceQname);
svc1.addPort(portQname, null, endpointUrl);
Dispatch<Source> dispatch = svc1.createDispatch(portQname, Source.class, null);
……
……
Service svc2 = Service.create(serviceQname);
svc2.addPort(portQname, null, endpointUrl);
Dispatch<Source> dispatch = svc2.createDispatch(portQname, Source.class, null);
여기서 svc1 및 svc2는 대상 서비스 엔드포인트와의 두 개의 서로 다른 보안 대화에 있습니다.
관리 콘솔을 사용하거나 스크립트를 사용하여 특성을 추가하여 범위를 변경할 수 있습니다.