
![[8.5.5.6 이상]](../ng_v8556.gif)
Liberty 프로파일에 대한 사용자 정의 JASPIC 인증 제공자 개발
JSR 196: Java™ Authentication Service Provider Interface for Containers 스펙에 명시된 필수 인터페이스를 구현하는 클래스를 작성하여 사용자 정의 JASPIC(Java Authentication SPI for Containers) 인증 제공자를 개발할 수 있습니다.
시작하기 전에
이 태스크 정보
WebSphere Application Server Liberty Profile은 JASPIC(Java Authentication SPI for Containers) 버전 1.1에 지정된 서블릿 컨테이너 프로파일을 준수하는 써드파티 인증 제공자 사용을 지원합니다.
서블릿 컨테이너 프로파일은 WebSphere® Application Server의 웹 컨테이너와 협업하여 보안 런타임 환경에서 사용되는 인터페이스를 정의하여 애플리케이션에서 웹 요청을 처리하기 전과 처리한 후에 인증 모듈을 호출합니다. JASPIC 모듈을 사용하는 인증은 보안 구성에서 JASPIC이 사용으로 설정된 경우에만 수행됩니다.
사용자 정의 인증 제공자를 개발하려면 JSR 196: Java Authentication Service Provider Interface for Containers 스펙에 명시된 필수 인터페이스를 구현하는 클래스를 작성하십시오. 제공자는 인증을 위해 하나 이상의 인증 모듈을 사용할 수 있습니다. 모듈은 인증을 수행하기 위해 콜백을 사용하거나 필요한 사용자 ID 정보를 수동으로 클라이언트 주제에 추가할 수 있습니다.
프로시저
- javax.security.auth.message.config.AuthConfigProvider 인터페이스를 구현하는 클래스를 작성하십시오. AuthConfigProvider 구현 클래스는 인수가 두 개인 공용 생성자와 getServerAuthConfig 공용 메소드를 정의해야 합니다.
import java.util.Map; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.message.AuthException; import javax.security.auth.message.config.AuthConfigFactory; import javax.security.auth.message.config.AuthConfigProvider; import javax.security.auth.message.config.ServerAuthConfig; public class SampleAuthConfigProvider implements AuthConfigProvider { public SampleAuthConfigProvider(Map<String, String> properties, AuthConfigFactory factory) { ... } public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException { ... } }
AuthConfigProvider 구현 클래스의 인스턴스는 애플리케이션의 웹 모듈에서 처리해야 하는 요청이 도달할 때 WebSphere Application Server에 의해 사용됩니다. getServerAuthConfig 메소드는 ServerAuthConfig 인스턴스를 얻는 데 사용됩니다. 메소드 호출에서 CallbackHandler 인수는 authentication 모듈에 의해 사용됩니다.
- javax.security.auth.message.config.ServerAuthConfig 인터페이스를 구현하는 클래스를 작성하십시오. ServerAuthConfig 구현 클래스는 getAuthContextID 및 getAuthContext 공용 메소드를 정의해야 합니다.
import java.util.Map; import javax.security.auth.Subject; import javax.security.auth.message.AuthException; import javax.security.auth.message.MessageInfo; import javax.security.auth.message.config.ServerAuthConfig; import javax.security.auth.message.config.ServerAuthContext; public class SampleServerAuthConfig implements ServerAuthConfig { public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException { ... } public ServerAuthContext getAuthContext(String authContextID, Subject serviceSubject, Map properties) throws AuthException { ... } }
ServerAuthConfig 구현 클래스의 getAuthContextID 및 getAuthContext 메소드는 ServerAuthContext 인스턴스를 얻는 데 사용됩니다.
- javax.security.auth.message.config.ServerAuthContext 인터페이스를 구현하는 클래스를 작성하십시오. ServerAuthContext 구현 클래스는 validateRequest 및 secureResponse 공용 메소드를 정의해야 합니다.
import javax.security.auth.Subject; import javax.security.auth.message.AuthException; import javax.security.auth.message.AuthStatus; import javax.security.auth.message.MessageInfo; import javax.security.auth.message.config.ServerAuthContext; public class SampleServerAuthContext implements ServerAuthContext { public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException { ... } public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException { ... } }
ServerAuthContext 구현 클래스에서 validateRequest 메소드는 수신된 웹 요청 메시지를 인증하는 모듈을 호출하는 데 사용됩니다. 인증 결과가 성공적이면 웹 컨테이너는 대상 웹 모듈이 애플리케이션에서 처리하는 수신된 웹 요청 메시지를 디스패치합니다. 인증 결과가 성공적이지 않으면 요청은 거부되고 적절한 응답 상태가 표시됩니다.
- javax.security.auth.message.module.ServerAuthModule 인터페이스를 구현하는 클래스를 작성하십시오. ServerAuthModule 구현 클래스는 initialize, validateRequest 및 secureResponse 공용 메소드를 정의해야 합니다.
import javax.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.message.AuthException; import javax.security.auth.message.AuthStatus; import javax.security.auth.message.MessageInfo; import javax.security.auth.message.MessagePolicy; import javax.security.auth.message.module.ServerAuthModule; public class SampleAuthModule implements ServerAuthModule { public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, Map options) throws AuthException { ... } public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException { ... } public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException { ... } public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException { ... } }
ServerAuthModule 구현 클래스의 initialize 메소드는 ServerAuthContext 구현 클래스에 의해 호출되어 authentication 모듈을 초기화하고 이 모듈을 ServerAuthContext 인스턴스와 연관시킵니다.
이 클래스의 validateRequest 및 secureResponse 메소드는 수신되는 javax.security.auth.message.MessageInfo에 포함된 javax.servlet.http.HttpServletRequest 및 javax.servlet.http.HttpServletResponse를 인증하는 데 사용됩니다. 이 메소드는 initialize 메소드에서 수신되는 CallbackHandler 인스턴스를 사용하여 WebSphere 보안 런타임과 상호작용하면서 사용자의 고유 ID와 멤버십 그룹을 검색하는 활성 사용자 레지스트리와 사용자 비밀번호의 유효성을 검증합니다. 검색된 데이터는 클라이언트 주제에서 개인용 신임 정보 세트의 Hashtable에 배치됩니다. CallbackHandler의 WebSphere Application Server 구현에서는 다음 세 개의 콜백을 지원합니다.- • CallerPrincipalCallback
- • GroupPrincipalCallback
- • PasswordValidationCallback
WebSphere Application Server는 PasswordValidationCallback.getUsername() 및 CallerPrincipalCallback.getName()을 사용하여 얻은 이름 값이 동일할 것이라고 예상합니다. 이름 값이 동일하지 않으면 예측할 수 없는 결과가 발생합니다. CallbackHandler의 handle() 메소드는 메소드의 인수 어레이에서 제공되는 각 콜백을 순차적으로 처리합니다. 따라서 클라이언트 주제의 개인용 신임 정보에 있는 이름 값 세트는 처리된 마지막 콜백에서 얻은 이름 값 세트입니다.
인증 모듈에서 CallbackHandler를 사용하지 않고 validateRequest가 성공적인 상태를 리턴하는 경우, WebSphere Application Server에서 사용자 정의 로그인을 수행하여 사용자에 대한 신임 정보를 얻을 수 있도록 Hashtable 인스턴스를 사용자 ID 정보가 있는 clientSubject에 포함해야 합니다. 이 Hashtable은 다음 예에서처럼 클라이언트 주제에 추가될 수 있습니다import java.util.Hashtable; import java.util.String; import javax.security.auth.Subject; import javax.security.auth.message.AuthException; import javax.security.auth.message.AuthStatus; import javax.security.auth.message.MessageInfo; import com.ibm.wsspi.security.registry.RegistryHelper; import com.ibm.wsspi.security.token.AttributeNameConstants.AttributeNameConstants; public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException { ... UserRegistry reg = RegistryHelper.getUserRegistry(null); String uniqueid = reg.getUniqueUserID(username); Hashtable hashtable = new Hashtable(); hashtable.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uniqueid); hashtable.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username); hashtable.put(AttributeNameConstants.WSCREDENTIAL_PASSWORD, password); hashtable.put(AttributeNameConstants.WSCREDENTIAL_GROUPS, groupList); //optional clientSubject.getPrivateCredentials().add(hashtable); ... }
Hashtable 요구사항과 사용자 정의 로그인에 대한 자세한 정보는 시스템 로그인 구성의 JAAS 사용자 정의 로그인 모듈 개발을 참조하십시오.

Information Center 이용 약관 | 피드백

http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_develop_jaspic
파일 이름: twlp_develop_jaspic.html