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

WSS SPI 사용 시 사용자 이름 및 비밀번호를 LTPA 토큰 생성기, LTPAGenerateLoginModule에 동적으로 전달할 수 있습니다. 그러나 정책 세트 및 바인딩을 사용해야 하는 경우 표준 구성에서는 이를 수행할 수 없습니다. 콜백 핸들러 및 콜백 핸들러의 사용자 이름과 비밀번호 모두 고정된 값이기 때문입니다. 사용자 정의 JAAS 로그인 모듈을 사용하는 경우 정책 세트 및 바인딩을 사용하여 동적 Kerberos 토큰을 작성할 수 있습니다.

시작하기 전에

사용자 정의 JAAS 로그인 모듈을 작성하거나 UsernameToken을 클라이언트의 요청 컨텍스트에 추가하는 경우 LTPA 토큰 생성기가 LTPA 토큰을 작성할 때 사용하는 사용자 이름 및 비밀번호를 사용자 정의할 수 있습니다. 또한 LTPA 토큰 생성기가 사용하는 토큰 바이트 수를 직접 설정하여 토큰을 사용자 정의할 수 있습니다. 토큰 바이트 수 설정은 애플리케이션 개발자가 인바운드 요청의 HTTP 헤더로부터 LTPA 토큰을 얻기 위한 코드를 작성하고 이 코드를 아웃바운드 SOAP 메시지의 보안 헤더에 배치하려는 경우에 유용합니다.

이 태스크 정보

GenericSecurityTokenFactory는 이 모듈이 생성하는 LTPA 토큰을 LTPAGenerateLoginModule이 사용자 정의하는 데 사용할 수 있는 SPI를 제공합니다. 이러한 SPI를 사용하면 동적 사용자 이름 또는 비밀번호를 사용하거나 토큰 바이트 수를 직접 설정할 수 있습니다. 이러한 기능은 콜백 핸들러에서는 제공하지 않습니다.

다음 프로시저는 스택된 JAAS 로그인 모듈 메소드를 사용하여 사용자 이름 및 비밀번호 또는 토큰 바이트 수를 사용자 정의하는 방법을 보여줍니다. 이 프로시저를 완료한 후에 새로 작성된 토큰을 클라이언트의 요청 컨텍스트에 배치할 수 있습니다. 토큰을 클라이언트의 요청 컨텍스트에 배치하는 방법에 대한 자세한 정보는 com.ibm.wsspi.wssecurity.core.Constants Javadoc에서 다음 상수를 참조하십시오.

  • com.ibm.wsspi.wssecurity.token.tokenHolder
  • com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext

프로시저

  1. 동적 토큰을 작성하십시오.

    다음 하위 단계 중 하나를 완료하십시오.

    1. 사용자 이름 및 비밀번호를 사용자 정의하려면 단순 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. 토큰 바이트 수를 사용자 정의하려면 단순 BinarySecurityToken을 작성하십시오.
      import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
      import com.ibm.websphere.wssecurity.wssapi.token.BinarySecurityToken;
      import com.ibm.websphere.wssecurity.wssapi.WSSUtilFactory;
      ...
      GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
      WSSUtilFactory utilFactory = WSSUtilFactory.getInstance();
      
      //callbackHandler is obtained from the initialize method in the Login Module
      Map reqHeaders = utilFactory.getHTTPRequestHeaders(callbackHandler);
      
      //getLtpaHeaderBytes is a method written by you to find the header that 
      //has the LTPA token in it in the header list, then return the encoded 
      //bytes out of the header.
      String encodedBytes = getLtpaHeaderBytes(reqHeaders); 
      
      byte [] decodedBytes = utilFactory.decode(encodedBytes);
      
      BinarySecurityToken bst = factory.getSimpleBinarySecurityToken(com.ibm.websphere.wssecurity.wssapi.token.LTPAv2Token, decodedBytes);
  2. 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;
    import com.ibm.websphere.wssecurity.wssapi.token.BinarySecurityToken;
    
    
    public class MyUntCustomLoginModule 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());
        }
    
        //code to create the BinarySecurityToken can be used
        //here instead of the simple UsernameToken
        UsernameToken unt = factory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
    
        factory.putGeneratorTokenToSharedState(this._sharedState, unt);
    
        return true;
      }
      //implement the rest of the methods required by the
      //LoginModule interface
    }
  3. 새 JAAS 로그인 구성을 작성하십시오.
    1. 관리 콘솔에서 보안->글로벌 보안을 선택하십시오.
    2. 인증에서 JAAS(Java Authentication and Authorization Service)를 선택하십시오.
    3. 시스템 로그인을 선택하십시오.
    4. 사용자 정의 모듈이 있는 생성기를 먼저 작성하십시오.
      1. 새로 작성을 클릭한 다음 Alias = test.generate.ltpa를 지정하십시오.
      2. 새로 작성을 클릭한 다음 Module class name = test.tokens.MyUntCustomLoginModule을 지정하십시오.
      3. 로그인 모듈 프록시 사용을 선택하십시오.
      4. 확인을 클릭하십시오.
      5. 새로 작성을 클릭한 다음 com.ibm.ws.wssecurity.wssapi.token.impl.LTPAGenerateLoginModule을 선택하십시오.
      6. 확인을 클릭하십시오.
      7. JAAS - 시스템 로그인을 클릭하십시오.
  4. 새 JAAS 구성을 사용하도록 LTPA 토큰 생성기를 구성하십시오.
    1. 변경하려는 바인딩 구성을 여십시오.

      관리 콘솔에서 WS-Security > 인증 및 보호를 선택하십시오.

    2. 인증 토큰에서 변경할 아웃바운드 LTPA 토큰을 선택하십시오.
    3. JAAS 로그인 = test.generate.ltpa를 선택하십시오.
    4. 저장을 클릭하십시오.
    5. 애플리케이션 서버를 다시 시작하여 JAAS 구성 변경사항을 적용하십시오.
    6. 서비스를 테스트하십시오.

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



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