스택된 JAAS 로그인 모듈을 사용하여 동적 UsernameToken 토큰 생성

GenericSecurityTokenFactory API를 사용하여 WS-Security 런타임에 사용할 완전히 채워진 UsernameToken 보안 토큰 또는 단순한 UsernameToken 보안 토큰을 작성할 수 있습니다. 이러한 보안 토큰은 WSSAPI, JAAS 로그인 모듈 또는 UNTGenerateLoginModule 등에 사용할 수 있습니다.

이 태스크 정보

GenericSecurityTokenFactory는 GenericIssuedTokenGenerateLoginModule을 사용하여 생성할 수 있는 UsernameToken을 작성하는 데 사용할 수 있는 여러 API를 제공합니다.

다음과 같이 두 가지 유형의 UsernameToken이 있습니다.
전체 UsernameToken
전체 UsernameToken은 XML을 포함하며 GenericSecurityTokenFactory 로그인 모듈과 함께 생성될 수 있습니다.
단순 UsernameToken
단순 UsernameToken은 사용자 이름 및 비밀번호만 포함하며 XML을 포함하지 않습니다. 단순 UsernameToken은 UNTGenerateLoginModule, LTPAGenerateLoginModule 및 KRBGenerateLoginModule이 사용할 수 있는 동적 사용자 이름 및 비밀번호를 설정하는 데 사용됩니다.

GenericSecurityTokenFactory API를 사용하여 전체 UsernameToken을 작성하면 이 토큰은 WS-Security 런타임에서 생성될 수 있는 완전한 양식의 보안 토큰입니다. 작성할 토큰 유형을 판별한 다음 다음 단계 중 하나에 지정된 명령과 비슷한 명령을 발행하여 토큰을 작성하십시오. 토큰이 작성된 후에는 이 토큰에 있는 사용자 이름 및 비밀번호를 모니터할 수 없습니다.

GenericSecurityTokenFactory API를 사용하여 단순 UsernameToken을 작성하면 이 토큰은 사용자 이름만 포함하며 선택적으로 비밀번호를 포함합니다. 단순 UsernameToken은 XML을 포함하지 않기 때문에 GenericIssuedTokenGenerateLoginModule을 사용하여 생성할 수 없습니다.

프로시저

  1. UsernameToken을 작성하십시오. 다음 UsernameToken 유형 중 하나를 작성할 수 있습니다.
    • 사용자 이름 및 비밀번호를 포함하는 전체 UsernameToken
    • 사용자 이름 및 시간소인은 포함하지만 비밀번호는 포함하지 않는 전체 UsernameToken
    • 사용자 이름 및 비밀번호를 포함하는 단순 UsernameToken
    • 사용자 이름 및 비밀번호를 포함하는 전체 UsernameToken을 작성하십시오.
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
      
      ...
      
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      UsernameToken myUnt = gstFactory.getFullUsernameToken("myUsername", "myPassword".toCharArray());
    • 사용자 이름 및 시간소인은 포함하지만 비밀번호는 포함하지 않는 전체 UsernameToken을 작성하십시오.
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
      
      ...
      
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      UsernameToken myUnt = gstFactory.getFullUsernameToken("myUsername", null, true);
    • 사용자 이름 및 비밀번호를 포함하는 단순 UsernameToken을 작성하십시오.
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
      ...
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      UsernameToken myUnt = gstFactory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
  2. JAAS 로그인 모듈을 작성하십시오. 이전 단계에서 전체 UsernameToken을 작성한 경우 전체 UsernameToken을 생성하려면 GenericIssuedTokenGenerateLoginModule 위에 스택될 수 있는 JAAS로그인 모듈을 작성해야 합니다. 이전 단계에서 단순 UsernameToken을 작성한 경우 동적 UsernameToken을 생성하려면 UNTGenerateLoginModule 위에 스택될 수 있는 JAAS 로그인 모듈을 작성해야 합니다.
    • 전체 UsernameToken을 생성하려면 GenericIssuedTokenGenerateLoginModule 위에 스택될 수 있는 JAAS 로그인 모듈을 작성하십시오.
      다음 예는 버전 8.5.0.2 이상을 사용하는 경우에 적용됩니다.
      package test.tokens;
      
      import java.util.HashMap;
      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;
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.WSSUtilFactory;
      import com.ibm.wsspi.wssecurity.core.config.CallbackHandlerConfig;
      
      import java.util.ArrayList;
      
      public class MyFullUntGenerator implements LoginModule {
      
        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 {
          //For the sake of readability, this login module does not
          //protect against all NPE's
      
          GenericSecurityTokenFactory factory = null;
          try {
            factory = GenericSecurityTokenFactory.getInstance();
          } catch (Exception e) {
            throw new LoginException(e.toString());
          }
          if (factory == null) {
            throw new LoginException("GenericSecurityTokenFactory.getInstance() returned null");
          }
      
          //The userid and password can be obtained however you want
      
         // (Optional) Obtain the username and password configured in the callback handler
          Map wssContext = getWSSContext(_handler);            
          CallbackHandlerConfig chc = (CallbackHandlerConfig) wssContext.get(CallbackHandlerConfig.CONFIG_KEY);    
                                                           
          String username = chc.getUserId();                   
          char[] password = chc.getUserPassword();   
      
          UsernameToken unt = factory.getFullUsernameToken("myUsername", "myPassword".toCharArray());
      	
          //Put the token in a list on the shared state where it will be available to be used by
          //stacked login modules
          factory.putGeneratorTokenToSharedState(_sharedState, unt);
      
          return true;
        }
        //implement the rest of the methods required by the
        //LoginModule interface
      }
    • 동적 UsernameToken을 생성하려면 UNTGenerateLoginModule 위에 스택될 수 있는 JAAS 로그인 모듈을 작성하십시오.
      package test.tokens;
      
      import java.util.HashMap;
      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;
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.WSSUtilFactory;
      import com.ibm.wsspi.wssecurity.core.config.CallbackHandlerConfig;
      
      import java.util.ArrayList;
      
      public class MySimpleUntGenerator implements LoginModule {
      
        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 {
          //For the sake of readability, this login module does not
          //protect against all NPE's
      
          GenericSecurityTokenFactory factory = null;
          try {
            factory = GenericSecurityTokenFactory.getInstance();
          } catch (Exception e) {
            throw new LoginException(e.toString());
          }
          if (factory == null) {
            throw new LoginException("GenericSecurityTokenFactory.getInstance() returned null");
          }
      	
          //The userid and password can be obtained however you want
      
          // (Optional) Obtain the username and password configured in the callback handler
          Map wssContext = getWSSContext(_handler);            
          CallbackHandlerConfig chc = (CallbackHandlerConfig) wssContext.get(CallbackHandlerConfig.CONFIG_KEY);    
                                                           
          String username = chc.getUserId();                   
          char[] password = chc.getUserPassword();   
      
          UsernameToken unt = factory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
      
          //Put the token in a list on the shared state where it will be available to be used by
          //stacked login modules
          factory.putGeneratorTokenToSharedState(_sharedState, unt);
      
          return true;
        }
        //implement the rest of the methods required by the
        //LoginModule interface
      }
  3. JAAS 로그인 구성을 작성하십시오.
    1. 이전 단계에서 작성한 사용자 정의 로그인 모듈의 전체 클래스 이름을 기록하십시오. 예를 들면, test.tokens.MyFullUntGenerator입니다.
    2. 스택하고 있는 로그인 모듈의 전체 클래스 이름을 기록하십시오. 예를 들면, com.ibm.ws.wssecurity.wssapi.token.impl.UNTGenerateLoginModule 또는 com.ibm.ws.wssecurity.wssapi.token.impl.GenericIssuedTokenGenerateLoginModule입니다.
    3. 관리 콘솔에서 보안 > 글로벌 보안으로 이동하십시오.
    4. 인증 아래에서 JAAS(Java Authentication and Authorization Service) > 시스템 로그인으로 이동하십시오.
    5. 새로 작성을 클릭하고 별명에 test.generate.unt를 입력하십시오.
    6. JAAS 로그인 모듈에서 새로 작성을 클릭하고 모듈 클래스 이름에 사용자 정의 로그인 모듈의 이름을 입력하십시오. 로그인 모듈 프록시 사용을 선택하고 확인을 클릭하십시오.
    7. 새로 작성을 클릭하고 모듈 클래스 이름에 스택 중인 로그인 모듈의 이름을 입력하십시오. 확인을 클릭하십시오.
  4. 새 JAAS 로그인 구성을 사용하도록 UsernameToken 토큰 생성기를 구성하십시오.
    1. 관리 콘솔에서 변경하려는 바인딩 구성을 여십시오.
    2. WS-Security > 인증 및 보호를 선택하십시오.
    3. 인증 토큰에서 변경할 아웃바운드 UsernameToken을 선택하십시오.
    4. JAAS 로그인에서 test.generate.unt를 선택하십시오.
    5. 옵션: GenericIssuedTokenGenerateLoginModule을 사용하는 경우 passThroughToken=true 사용자 정의 특성을 추가하십시오.
      1. 콜백 핸들러를 클릭하십시오.
      2. passThroughToken=true 사용자 정의 특성을 추가하십시오.
      3. 확인을 클릭하십시오.
  5. 저장을 클릭하십시오.
  6. 애플리케이션 서버를 다시 시작하여 JAAS 구성 변경사항을 적용하십시오.
  7. 서비스를 테스트하십시오.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createusertokens
파일 이름:twbs_createusertokens.html