Puede dinámicamente pasar un nombre de usuario y la contraseña al generador de señales de Kerberos, KRBGenerateLoginModule, cuando se utiliza WSSAPI. Sin embargo, si debe utilizar conjuntos de políticas y enlaces, puede hacer esto en una configuración estándar porque tanto el manejador de devolución de llamada como el nombre de usuario y la contraseña en el manejador de devolución de llamada son valores fijos. Las señales Kerberos dinámicas pueden crearse utilizando conjuntos de políticas y enlaces si se utiliza un módulo de inicio de sesión JAAS personalizado.
Antes de empezar
Si crea un módulo de inicio de sesión JAAS personalizado o añade un UsernameToken para el contexto de petición del cliente, puede personalizar el nombre de usuario y la contraseña que el generador de señales Kerberos utiliza al solicitar el tíquet Kerberos.
Acerca de esta tarea
El GenericSecurityTokenFactory proporciona una SPI que puede utilizar para crear una señal que KRBGenerateLoginModule puede utilizar para personalizar el nombre de usuario y la contraseña que se utilizan al solicitar el tíquet Kerberos.
El procedimiento siguiente muestra cómo utilizar el método de módulo de inicio de sesión JAAS apilado para personalizar el nombre de usuario y una contraseña que KRBGenerateLoginModule utilizará al crear una señal Kerberos. Puede conseguir los mismos resultados colocando el UsernameToken, que se crea en este procedimiento, en el contexto de petición del cliente. Sólo puede crear una señal Kerberos dinámica de un UsernameToken que cree. No puede crear una señal Kerberos dinámica a partir de un tíquet de Kerberos. Para obtener más información sobre cómo colocar la señal en el contexto de petición del cliente consulte las siguientes constantes en com.ibm.wsspi.wssecurity.core.Constants:
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
Procedimiento
- Cree un módulo de inicio de sesión JAAS personalizado.
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 {
//Para facilitar la comprensión, este módulo de inicio de sesión no
//protege contra todos los NPE
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;
}
//implemente el resto de métodos requeridos por la
//interfaz de módulo de inicio de sesión
}
- Cree una nueva configuración de inicio de sesión JAAS.
- En la consola administrativa, seleccione Seguridad-> Seguridad global.
- En Autenticación, seleccione Servicio de autenticación y autorización Java.
- Seleccione Inicios de sesión de sistema.
- Cree primer el generador con el módulo personalizado.
- Pulse Nuevo y, a continuación, especifique Alias
= test.generate.krb.
- Pulse Nuevo y, a continuación, especifique Module
class name = test.tokens.MyKrbCustomLoginModule.
- Seleccione Utilizar proxy de módulo de inicio de sesión .
- Pulse OK (Aceptar).
- Pulse Nuevo y, a continuación, seleccione Module
class name = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule.
- Pulse Nuevo y, a continuación, seleccione Module
class name = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule.
- Pulse Aceptar.
- Pulse JAAS - Inicios de sesión del sistema.
- Configure el generador de señales Kerberos para utilizar la nueva configuración JAAS.
- Abra la configuración de enlaces que desea cambiar.
En la consola administrativa, seleccione WS-Security > Autenticación y protección.
- En Señales de autenticación, seleccione la señal de salida de Kerberos que desea cambiar.
- Seleccione JAAS login = test.generate.krb.
- Pulse Guardar.
- Reinicie el servidor de aplicaciones para aplicar los cambios de configuración JAAS.
- Pruebe el servicio.