Puede dinámicamente pasar un nombre de usuario y la contraseña al generador de señales LTPA, LTPAGenerateLoginModule, cuando se utiliza la SPI de WSS. 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. Puede utilizar conjuntos de políticas y enlaces para crear señales de Kerberos dinámicas 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 LTPA utiliza al crear una señal LTPA. También puede personalizar la señal directamente estableciendo los bytes de la señal que el generador de señales LTPA utiliza. El establecimiento de los bytes de señal es útil cuando un desarrollador de aplicaciones desea escribir código para obtener la señal LTPA de la cabecera HTTP de una solicitud de entrada y colocarlo en la cabecera de seguridad de un mensaje SOAP de salida.
Acerca de esta tarea
El GenericSecurityTokenFactory proporciona una SPI que puede utilizar para crear una señal que el LTPAGenerateLoginModule puede utilizar para personalizar la señal LTPA que este módulo genera. Las SPI permiten utilizar nombres de usuario y contraseñas dinámicos o directamente establecer los bytes de la señal, que son funciones que el manejador de devolución de llamada no proporciona.
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 o bytes de señal. Después de completar este procedimiento, también puede colocar la señal recién creada en el contexto de petición del cliente. Para obtener más información sobre cómo colocar una señal en el contexto de petición del cliente, consulte las siguientes constantes en Javadoc: com.ibm.wsspi.wssecurity.core.Constants
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
Procedimiento
- Cree la señal dinámica.
Realice uno de los pasos siguientes.
- Para personalizar el nombre de usuario y la contraseña, cree un UsernameToken simple.
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());
- Para personalizar los bytes de la señal, cree un simple 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 se obtiene del método initialize en el módulo de inicio de sesión
Map reqHeaders = utilFactory.getHTTPRequestHeaders(callbackHandler);
//getLtpaHeaderBytes es un método escrito por el usuario para buscar la cabecera que
//tiene incluida la señal LTPA en la lista de cabecera y a continuación devuelve los bytes
//codificados fuera de la cabecera.
String encodedBytes = getLtpaHeaderBytes(reqHeaders);
byte [] decodedBytes = utilFactory.decode(encodedBytes);
BinarySecurityToken bst = factory.getSimpleBinarySecurityToken(com.ibm.websphere.wssecurity.wssapi.token.LTPAv2Token, decodedBytes);
- Crear un módulo de inicio de sesión 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 {
//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());
}
//código para crear BinarySecurityToken se puede utilizar
//aquí en lugar del simple UsernameToken
UsernameToken unt = factory.getSimpleUsernameToken("myUsername", "myPassword".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.ltpa.
- Pulse Nuevo y, a continuación, especifique Module
class name = test.tokens.MyUntCustomLoginModule.
- Seleccione Utilizar proxy de módulo de inicio de sesión .
- Pulse OK (Aceptar).
- Pulse Nuevoy, a continuación, seleccione com.ibm.ws.wssecurity.wssapi.token.impl.LTPAGenerateLoginModule.
- Pulse Aceptar.
- Pulse JAAS - Inicios de sesión del sistema.
- Configure el generador de señales LTPA 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 LTPA de salida que desea cambiar.
- Seleccione JAAS login = test.generate.ltpa.
- Pulse Guardar.
- Reinicie el servidor de aplicaciones para aplicar los cambios de configuración JAAS.
- Pruebe el servicio.