웹 서비스 보안 API 프로그래밍 모델
애플리케이션 서버 프로그래밍 모델은 SOAP 메시지 보안을 위한 웹 서비스 보안 프로그래밍 API(Application Programming Interface)(WSS API)를 제공합니다.
API 프로그래밍 모델은 웹 서비스 보안 버전 1.1 표준을 기반으로 하는 인터페이스 기반 프로그래밍 모델이지만, 설계에 SOAP 메시지 보안을 위한 웹 서비스 보안 버전 1.0에 대한 지원도 포함됩니다. WSS API 프로그래밍 모델 구현은 웹 서비스 보안을 위해 Java™ API 바인딩을 정의하기 위한 JSR인 JSR-183의 초기 드래프트 제안을 기반으로 하는 단순한 버전입니다. 설계에 의해 애플리케이션 코드가 인터페이스에 프로그래밍되어 있으므로 오픈 소스 구현으로 프로그래밍된 애플리케이션 코드는 최소한의 변경이나 아예 변경하지 않고 WebSphere® Application Server에서 실행할 수 있어야 합니다.
웹 서비스의 구성 모델도 배치 디스크립터 모델에서 정책 세트 모델로 다시 디자인되었습니다. 웹 서비스 보안은 관리 콘솔을 사용하여 구성된 정책 세트를 사용하거나 구성을 위해 WSS API를 사용하여 사용 가능으로 설정할 수 있습니다. 정책 세트 구성에 의해 제공되는 기능은 웹 서비스 보안 런타임을 위해 WSS API가 지원하는 기능과 동일합니다. 그러나 정책 세트를 사용하여 정의된 보안 정책이 WSS API보다 우선순위가 높습니다. WSS API 및 정책 세트 둘 모두가 애플리케이션에 사용된 경우 기본 동작은 강제 실행될 정책 세트와 무시될 WSS API의 보안 정책에 적용됩니다. 애플리케이션에서 WSS API를 사용하려면 애플리케이션이나 애플리케이션 자원에 정책 세트가 첨부되지 않았는지 확인하거나 첨부된 정책 세트에 보안 정책이 없는지 확인하십시오.
여전히 웹 서비스 보안과 함께 기존 JAX-RPC 애플리케이션을 사용할 수 있습니다. 그러나 해당 애플리케이션은 정책 세트를 사용한 보안 정책 구성, OM 필터 설능 개선사항, WSS API, 웹 서비스 보안 대화(WS-SecureConversation), 메시지 보호 및 ID 전파를 위한 Kerberos 토큰 및 연관된 SHA-1 키, WS-Trust(Web Services Trust) 기능 같은 웹 서비스 보안 버전 1.1 기능을 활용할 수 없습니다.
웹 서비스 보안 버전 1.1 기능을 활용하려면 기존 JAX-RPC 애플리케이션을 JAX-WS 애플리케이션으로 다시 쓰고, 수동으로 보안 제한사항을 정책 세트로 재구성하고, OM 기반 SPI로의 DOM 기반 SPI의 코드 마이그레이션을 수행해야 합니다.
예를 들어, JAX-WS 프로그래밍 모델을 사용할 때 플러그 가능 토큰 프레임워크의 개선된 설계는 API 및 정책 세트 모두에 대해 동일한 보안 구현이 사용되도록 허용합니다. 이 프레임워크는 토큰 작성 및 토큰 유효성 검증을 위해 JAAS 로그인 모듈 및 JAAS 콜백 핸들러를 사용합니다.
다음 다이어그램은 프로그래밍 모델 사이의 차이를 보여줍니다.


WSS API 사용 시 지원되는 사항
WSS API는 클라이언트에서만 사용할 수 있습니다. API를 사용하여 SOAP 메시지를 메시지 레벨 보안으로 보안하기 위해 Java SE 6 클라이언트, J2EE 애플리케이션 클라이언트 또는 서버 클라이언트(클라이언트로 작용하는 서비스 제공자)를 사용할 수 있습니다.
- Java 기반 인터페이스입니다.
- 팩토리 모델(WSSFactory)을 사용하여 구현됩니다.
- Username 및 X.509 토큰 프로파일, 버전 1.0 및 1.1을 포함하는 WS-Security 버전 1.0 및 1.1 표준을 지원합니다.
- 매우 XML 중심입니다.
- API를 단순화하는 오브젝트 지향 디자인을 포함합니다.
- 태스크 지향이며 본문 서명 및 SOAP 메시지 본문 컨텐츠 암호화와 같은 공통 사용법 시나리오를 허용합니다.
- 융통성이 있고 확장 가능하며, 토큰 유형 지원을 확장할 수 있게 합니다.
- 제공자 프레임워크를 기본으로 하며 AXIOM 또는 DOM과 같이 다른 데이터 모델을 사용할 수 있습니다.
- 애플리케이션에서 WSS를 적용할 때 애플리케이션 프로그래머에게 보다 향상된 제어 및 융통성을 제공합니다.
WSS API의 기본값은 미리 정의되고, 웹 서비스 보안 런타임의 일부입니다. 다음에 대한 기본값이 제공됩니다.
- 시간소인의 지속 기간
- 서명 알고리즘, 정규 알고리즘, 요약 메소드, 변환 알고리즘, 보안 토큰 참조 메소드 및 서명된 파트(예: SOAP 본문, 웹 서비스 주소 지정 헤더 및 시간소인).
- 키 암호화 알고리즘, 데이터 암호화 알고리즘, 보안 토큰 참조 메소드 및 암호화된 파트(예: SOAP 본문 컨텐츠).
서명 유효성 검증은 서명과 비슷한 기본값(서명 정보)을 갖습니다. 이와 유사하게 암호 해독은 암호화와 비슷한 기본값을 갖습니다.
WSS API 사용 시 지원되지 않는 사항
애플리케이션 서버와 함께 제공되는 WSS API는 다음 기능을 지원하지 않습니다.
- 애플리케이션 프로그래밍 모델이 JAX-WS이며, JAX-RPC(JSR-109) 애플리케이션은 지원되지 않음을 의미합니다.
- WSS API는 JAX-WS 클라이언트 애플리케이션의 동기식 메시지 교환에 사용 가능합니다. 그러나 WSS API는 비동기 클라이언트에는 지원되지 않습니다.
- WSS API 지원은 요청자에게만 사용 가능하며 제공자에게는 사용 불가능합니다.
- ID 어설션 시맨틱 프로그래밍 모델은 ID 신뢰가 웹 서비스 보안 버전 1.0 표준의 일부가 아니므로 WSS API에서 지원되지 않습니다. 그러나 WSS API를 사용하여 토큰 처리 시 ID 어설션 시맨틱을 추가할 수 있습니다.
WS-Trust 및 WS-SecureConversation 시나리오
- 정책 세트에서 정의되는 부트스트랩 정책 사용.
- WS-SecureConversation을 지원하는 WSS API 사용.
- 클라이언트가 런타임 시 제공자측 정책을 검색할 수 있도록 제공자에 대한 동적 정책을 사용으로 설정.
애플리케이션은 프로그램의 API 기반 보안 통신에 보안 컨텍스트 토큰을 확보하기 위해 WSS API를 사용합니다. WebSphere Application Server 신뢰 서비스는 서비스에 대한 액세스용 보안 토큰을 요청하는 기능을 애플리케이션에 제공합니다. 신뢰 서비스의 범위와 초점은 WS-SecureConversation의 WebSphere Application Server 보안 컨텍스트 토큰(SCT)만을 위한 것입니다.
WS-SecureConversation 및 WS-Trust 시나리오는 다양한 구성요소의 구성 및 런타임 상호 작용과 같은 상호 운용성 기능에 중점을 둡니다. 신뢰 서비스에서 보안 컨텍스트 토큰을 확보하려면 부트스트랩 RST 및 RSTR을 보안하기 위해 WSS API를 사용하게 됩니다. 보안 컨텍스트 토큰을 확보하고 나면 파생된 키 토큰이 WSS API를 사용하여 작성됩니다. 그런 후 파생된 키 토큰이 서명 및 암호화에 사용할 수 있습니다.
- 요청 생성기 애플리케이션 코드에 있는 보안 SOAP 메시지 생성.
- 응답 이용자 애플리케이션 코드에 있는 보안 SOAP 메시지 이용.
두 경우 모두, 오류가 발생하면 Java 예외 class com.ibm.websphere.wssecurity.wssapi.WSSException이 제공됩니다.
웹 서비스 클라이언트 보안 컨텍스트
JAX-WS 클라이언트가 웹 서비스를 호출할 때, 보안 핸들에 의해 구성되는 현재 보안 컨텍스트가 RequestContext 오브젝트에 저장됩니다. 기본적으로, JAX-WS 웹 서비스 클라이언트 런타임 환경의 보안 컨텍스트는 다음 웹 서비스 요청 호출을 위해 재구성됩니다. 후속 웹 서비스 호출을 위해 보안 컨텍스트를 유지할 수 있습니다. 이것의 예는 보안 정책이 클라이언트가 사용자 이름 및 비밀번호를 갖는 사용자 이름 보안 토큰을 전송해야 하는 시나리오입니다. 클라이언트가 서비스를 호출하는 첫 번째 요청을 보낼 때, 사용자에게 필수 사용자 이름 및 비밀번호를 압력하라는 프롬프트가 표시됩니다. 사용자 이름과 비밀번호는 보안 컨텍스트의 주제에 있는 Username SecurityToken 토큰에 저장됩니다. 후속 요청 호출에서 동일한 사용자 이름과 비밀번호를 다시 입력하라는 프롬프트를 피하기 위해 보안 컨텍스트를 유지할 수 있습니다. 보안 컨텍스트를 유지하는 두 가지 방법이 있는데, 1) 후속 요청 호출을 위해 클라이언트 보안 컨텍스트를 자동으로 유지하도록 클라이언트 런타임을 구성하거나, 2) 보안 컨텍스트를 수동으로 유지하십시오.
보안 컨텍스트를 자동으로 유지하도록 JAX-WS 클라이언트 런타임 환경을 구성하려면 Java 시스템 특성 com.ibm.websphere.wssecurity.context.management를 true로 설정하십시오. 이 시스템 특성이 true일 때, JAX-WS 클라이언트 런타임은 보안 핸들러에 의해 구성되는 보안 컨텍스트를 자동으로 RequestContext로 복사하며, 해당 컨텍스트가 후속 요청 호출에 사용됩니다.
// First request
Service svc = Service.create(...);
svc.addPort(...);
Dispatch<String> dispatch = svc.createDispatch(...);
Map<String, Object> requestContext = dispatch.getRequestContext();
String response = dispatch.invoke(body.toString());
Object securityContext = requestContext.get(com.ibm.wsspi.websvcs.Constants.WEBSPHERE_SECURITY_CONTEXT);
// Subsequent request
Dispatch<String> dispatch = svc.createDispatch(...);
Map<String, Object> requestContext = dispatch.getRequestContext();
Object securityContext = requestContext.put(com.ibm.wsspi.websvcs.Constants.WEBSPHERE_SECURITY_CONTEXT, securityContext);