使用堆栈化 JAAS 登录模块来生成动态 Kerberos 令牌

使用 WSSAPI 时,可以动态地将用户名和密码传递到 Kerberos 令牌生成者 KRBGenerateLoginModule。但是,如果必须使用策略集和绑定,那么无法在标准配置中动态地将用户名和密码传递到 Kerberos 令牌生成者,因为回调处理程序以及回调处理程序中的用户名和密码都是固定值。如果使用了定制 JAAS 登录模块,那么可以使用策略集和绑定来创建动态 Kerberos 令牌。

开始之前

如果创建定制 JAAS 登录模块,或将 UsernameToken 添加至客户机的请求上下文,那么可以定制 Kerberos 令牌生成者在请求 Kerberos 凭单时所使用的用户名和密码。

关于此任务

GenericSecurityTokenFactory 提供的 SPI 可用来创建令牌,而 KRBGenerateLoginModule 可以使用该令牌来定制请求 Kerberos 凭单时使用的用户名和密码。

以下过程显示如何使用堆栈化 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

过程

  1. 创建定制 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
    }
  2. 创建新的 JAAS 登录配置。
    1. 在管理控制台中,选择安全性 -> 全局安全性
    2. 在认证下,选择 Java 认证和授权服务
    3. 选择系统登录
    4. 首先创建具有定制模块的生成者。
      1. 单击新建,然后指定别名 = test.generate.krb
      2. 单击新建,然后指定模块类名 = test.tokens.MyKrbCustomLoginModule
      3. 选择使用登录模块代理
      4. 单击确定
      5. 单击新建,然后选择模块类名 = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule
      6. 单击新建,然后选择模块类名 = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule
      7. 单击确定
      8. 单击 JAAS - 系统登录
  3. 配置 Kerberos 令牌生成者以使用新的 JAAS 配置。
    1. 打开要更改的绑定配置。

      在管理控制台中,选择 WS-Security > 认证和保护

    2. 在“认证令牌”下,选择要更改的 Kerberos 出站令牌。
    3. 选择 JAAS 登录 = test.generate.krb
  4. 单击保存
  5. 重新启动应用程序服务器以应用 JAAS 配置更改。
  6. 测试您的服务。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_gen_dynamickerbtoken
文件名:twbs_gen_dynamickerbtoken.html