WSSAPI 사용 시 사용자 이름 및 비밀번호를 Kerberos 토큰 생성기 KRBGenerateLoginModule에 동적으로 전달할 수 있습니다.
그러나 정책 세트 및 바인딩을 사용해야 하는 경우 표준 구성에서는 사용자 이름 및 비밀번호를 Kerberos 토큰 생성기에 동적으로 전달할 수 없습니다. 콜백 핸들러 및 콜백 핸들러의 사용자 이름과 비밀번호 모두 고정된 값이기 때문입니다. 사용자 정의 JAAS 모듈이 사용되는 경우 동적 Kerberos
토큰은 정책 세트 및 바인딩을 사용하여 작성할 수 있습니다.
시작하기 전에
사용자 정의 JAAS 로그인 모듈을 작성하거나 UsernameToken을 클라이언트의 요청 컨텍스트에 추가하는 경우
Kerberos 토큰 생성기가 Kerberos 티켓을 요청할 때 사용하는 사용자 이름 및 비밀번호를
사용자 정의할 수 있습니다.
이 태스크 정보
GenericSecurityTokenFactory는 Kerberos 티켓을 요청할 때
사용되는 사용자 이름 및 비밀번호를 사용자 정의하기 위해 KRBGenerateLoginModule이 사용할 수 있는 토큰을 작성하는 데
사용할 수 있는 SPI를 제공합니다.
다음 프로시저는 스택된 JAAS 로그인 모듈 메소드를 사용하여
KRBGenerateLoginModule이 Kerberos 토큰을 작성할 때 사용할 사용자 이름 및 비밀번호를 사용자 정의하는 방법을 보여줍니다. 이 프로시저에서 작성되는
UsernameToken을 클라이언트의 요청 컨텍스트에 배치하여 같은 결과를 얻을 수 있습니다. 사용자가 작성하는 UsernameToken에서만
동적 Kerberos 토큰을 작성할 수 있습니다. Kerberos
티켓에서는 동적 Kerberos 토큰을 작성할 수 없습니다. 토큰을 클라이언트의 요청 컨텍스트에 배치하는 방법에 대한 자세한 정보는 com.ibm.wsspi.wssecurity.core.Constants에서 다음 상수를 참조하십시오.
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
프로시저
- 사용자 정의 JAAS 로그인 모듈을 작성하십시오.
package test.tokens;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
public class MyKrbCustomLoginModule implements LoginModule {
//For the sake of readability, this login module does not
//protect against all NPE's
private Map _sharedState;
private Map _options;
private CallbackHandler _handler;
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String, ?> sharedState, Map<String, ?> options) {
this._handler = callbackHandler;
this._sharedState = sharedState;
this._options = options;
}
public boolean login() throws LoginException {
GenericSecurityTokenFactory factory = null;
try {
factory = GenericSecurityTokenFactory.getInstance();
} catch (Exception e) {
throw new LoginException(e.toString());
}
UsernameToken unt = factory.getSimpleUsernameToken("username", "password".toCharArray());
factory.putGeneratorTokenToSharedState(this._sharedState, unt);
return true;
}
//implement the rest of the methods required by the
//LoginModule interface
}
- 새 JAAS 로그인 구성을 작성하십시오.
- 관리 콘솔에서 보안->글로벌 보안을 선택하십시오.
- 인증에서 JAAS(Java Authentication and Authorization Service)를
선택하십시오.
- 시스템 로그인을 선택하십시오.
- 사용자 정의 모듈이 있는 생성기를 먼저 작성하십시오.
- 새로 작성을 클릭한 다음 Alias
= test.generate.krb를 지정하십시오.
- 새로 작성을 클릭한 다음 Module
class name = test.tokens.MyKrbCustomLoginModule을 지정하십시오.
- 로그인 모듈 프록시 사용을 선택하십시오.
- 확인을 클릭하십시오.
- 새로 작성을 클릭한 다음 Module
class name = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule을 선택하십시오.
- 새로 작성을 클릭한 다음 Module
class name = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule을 선택하십시오.
- 확인을 클릭하십시오.
- JAAS - 시스템 로그인을 클릭하십시오.
- 새 JAAS 구성을 사용하도록 Kerberos 토큰 생성기를 구성하십시오.
- 변경하려는 바인딩 구성을 여십시오.
관리 콘솔에서 WS-Security > 인증 및 보호를 선택하십시오.
- 인증 토큰에서 변경할 아웃바운드 토큰을 선택하십시오.
- JAAS login = test.generate.krb를 선택하십시오.
- 저장을 클릭하십시오.
- 애플리케이션 서버를 다시 시작하여 JAAS 구성 변경사항을 적용하십시오.
- 서비스를 테스트하십시오.