웹 서비스 보안 및 Java Platform, Enterprise Edition 보안 관계
이 문서는 웹 서비스 보안(메시지 레벨 보안) 모델 및 Java™ EE(Java Platform, Enterprise Edition) 보안 모델 간의 관계를 설명합니다. 또한 Java EE 역할 기반 권한 검사에 대한 정보도 포함합니다.
WebSphere Application Server는 JSR(Java Specification Requests) 101 및 JSR 109를 지원합니다. JSR 101 및 109는 Java EE 컴포넌트 아키텍처에서 웹 서비스를 개발 및 실행할 수 있도록 Java EE용 웹 서비스 아키텍처를 정의합니다.
WebSphere Application Server 보안(Java EE 역할 기반 보안)을 사용하여 웹 서비스 보안 설정

웹 서비스 포트는 Java EE 역할 기반 보안을 사용하여 보호할 수 있습니다. 웹 서비스 송신자는 HTTP 헤더를 사용하여 기본 인증 데이터를 전송합니다. 전송을 보호하기 위해 SSL(HTTPS)을 사용할 수 있습니다. WebSphere Application Server가 SOAP 메시지를 받으면 웹 컨테이너는 사용자(이 예에서는 user1)를 인증하고 호출의 보안 컨텍스트를 설정합니다. 보안 컨텍스트를 설정한 후 SOAP 라우터 서블릿은 요청을 웹 서비스 구현에 전송합니다. (구현은 JavaBeans 또는 엔터프라이즈 Bean 파일일 수 있습니다.) 엔터프라이즈 Bean 구현의 경우 EJB 컨테이너는 user1의 ID에 대해 권한 검사를 수행합니다.
웹 서비스 포트는 Java EE 역할을 사용하여 또한 보호할 수 있습니다. 그런 다음 SOAP 요청이 웹 서비스 구현으로 전달되기 전에 웹 컨테이너가 권한을 수행합니다.
메시지 레벨에서 웹 서비스 보안을 사용하여 웹 서비스 보호
메시지 레벨에서 웹 서비스 보안을 사용하여 웹 서비스를 보호할 수 있습니다. 이 경우에는 메시지의 특정 파트를 디지털 서명하거나 암호화할 수 있습니다. 웹 서비스 보안은 또한 SOAP 메시지 내에서 보안 토큰 전파를 지원합니다. 다음 시나리오에서는 웹 서비스 포트가 Java EE 역할 기반 보안을 사용하여 보호되지 않고 엔터프라이즈 Bean은 Java EE 역할 기반 보안을 사용하여 보호되는 것으로 가정합니다.

이 경우 웹 서비스 포트는 Java EE 역할 기반 보안을 사용하여 보호되지 않습니다. 웹 서비스 엔진은 클라이언트가 웹 서비스 포트에 메시지를 전송하기 전에 SOAP 메시지를 처리합니다. 웹 서비스 보안 런타임은 SOAP 헤더에서 디지털 서명, 암호화 또는 보안 토큰 생성(및 삽입)과 같은 보안 제한조건에서 작동합니다. 이 경우 <wsse:UsernameToken>은 user1 및 비밀번호를 사용하여 생성됩니다. 서버 측(수신)에서, 웹 서비스는 수신 메시지를 처리하고 웹 서비스 보안은 보안 제한조건을 강요합니다. 메시지가 제대로 서명되었고, 제대로 암호화 및 복호화되었는지 확인하고, 보안 토큰을 인증하고 인증된 ID를 사용하여 보안 컨텍스트를 설정하는 작업도 강요됩니다. (이 경우 user1은 인증된 ID입니다.) 마지막으로 SOAP 메시지는 웹 서비스 구현으로 전달됩니다(구현이 엔터프라이즈 Bean 파일이고 EJB(Enterprise JavaBeans) 컨테이너가 user1에 대한 권한 검사를 수행하는 경우). 이 시나리오에서는 SSL도 사용될 수 있습니다.
두 개 혼합
두 번째 시나리오는 웹 서비스 보안이 Java EE 역할 기반 보안을 보충할 수 있음을 보여 줍니다. 예를 들어, SSL은 보안 채널을 제공하기 위해 전송 레벨에서 사용 가능합니다. 더구나 웹 서비스 구현이 엔터프라이즈 Bean 파일인 경우 권한 검사를 수행하여 EJB 역할 기반 권한을 이용할 수 있습니다. 웹 서비스 보안 런타임은 보안 인프라를 이용하여 보안 컨텍스트에 인증된 ID를 설정합니다. 인증된 ID는 Java EE 자원(또는 다른 자원 유형)에 대한 다운스트림 호출에서 사용될 수 있습니다.
두 개의 시나리오를 결합하는 미묘한 결론이 있습니다. 예를 들어, HTTP 전송이 HTTP 헤더에 있는 user1 및 비밀번호를 사용하여 기본 인증 데이터를 전송하지만, user99 및 letmein를 사용하는 <wsse:UsernameToken>은 SOAP 헤더에 삽입되는 경우입니다. 이전 시나리오에는 두 개의 인증이 수행되었습니다. 하나의 인증은 웹 컨테이너가 user1을 인증하기 위해 수행하고, 다른 인증은 웹 서비스 보안이 user99를 인증하기 위해 수행합니다. 웹 서비스 보안 런타임은 웹 컨테이너가 실행된 후에 실행되고 user99는 보안 컨텍스트에 설정된 인증 ID입니다.
웹 서비스 보안은 보안 토큰을 JMS(Java Message Service) 전송을 통해 송신자로부터 SOAP의 수신자에게 전파할 수도 있습니다.
Java EE 역할 기반 권한 부여 선택
권한 부여에 대한 표준은 웹 서비스에 대해 존재하지 않습니다. 그러나 IBM은 Microsoft Corporation과 함께 WS 권한 스펙에 대한 제안이 존재하는 Security in a Web Services World: A Proposed Architecture and Roadmap이라는 웹 서비스에 대한 보안 백서 길잡이를 공개했습니다. 그러나 WS-Authorization 스펙은 공개되지 않았습니다.
웹 서비스 보안의 기존 구현은 Java EE 스펙용 웹 서비스 및 JSR(Java Specification Requirements) 109 스펙을 기본으로 합니다. 웹 서비스 보안의 구현은 Java EE 역할 기반 권한 검사를 활용합니다. 개념 정보는 역할 기반 권한에 대해 읽어보십시오. 메소드 레벨 권한 검사를 필요로 하는 웹 서비스를 개발하는 경우 Stateless 세션 Bean을 사용하여 웹 서비스를 구현해야 합니다. Stateless 세션 Bean을 사용하여 웹 서비스를 구현하는 방법에 대한 자세한 정보는 프로그래밍 모델에 따라 "JAX-WS에서 웹 서비스 애플리케이션 구현" 또는 "JAX-RPC에서 웹 서비스 애플리케이션 구현" 주제를 참조하십시오. 또한 엔터프라이즈 Bean 애플리케이션 보안에 대해 읽어보십시오. 서블릿으로 구현된 웹 서비스를 개발하는 경우 웹 컨테이너에서 입자성 또는 URL 기반 권한을 사용할 수 있습니다. 그러나 이 상황에서는 권한 검사에 웹 서비스 보안의 ID를 사용할 수 없습니다. 대신 전송의 ID를 사용할 수 있습니다. HTTP를 통해 SOAP를 사용하는 경우 ID는 HTTP 전송에 있습니다.