El contenedor de cliente de aplicaciones del perfil Liberty se puede configurar para utilizar un inicio de sesión programático JAAS.
Acerca de esta tarea
Un inicio de sesión programático es un tipo de inicio de sesión de formulario que admite formularios de presentación de aplicaciones para la autenticación. Este enfoque requiere que el desarrollador de aplicaciones recopile las credenciales del usuario y autentique a ese usuario. Este método aprovecha la infraestructura de JAAS para enviar credenciales de un usuario al servidor para su autenticación.
La infraestructura JAAS consiste en crear un contexto de inicio de sesión especificando una configuración de inicio de sesión JAAS y utilizando un manejador de devolución de llamada para recopilar las credenciales de usuario. Cuando se obtiene un sujeto del contexto de inicio de sesión, puede utilizar la API de seguridad de Liberty para establecer ese sujeto en la hebra y se utiliza para la llamada saliente al servidor.
La configuración de inicio de sesión de
JAAS especifica qué módulos de inicio de sesión se utilizan para la autenticación y cómo se utilizan. Están las configuraciones de inicio de sesión de JAAS que las proporciona el perfil Liberty en el cliente:
- Configuración de inicio de sesión de JAAS WSLogin: una configuración de inicio de sesión de JAAS genérica que puede utilizar una aplicación de contenedor de clientes de aplicaciones del perfil Liberty para llevar a cabo la autenticación que se utiliza en un ID de usuario y contraseña. Sin embargo, esta configuración no da soporte al manejador CallbackHandler que se ha especificado en el descriptor de despliegue del módulo de la aplicación cliente.
- Configuración de inicio de sesión de JAAS ClientContainer: esta configuración de inicio de sesión de
JAAS reconoce el manejador CallbackHandler que se ha especificado en el descriptor de despliegue de módulos de aplicación cliente, si se ha especificado alguno. Si no se ha especificado ningún manejador en el descriptor de despliegue, se utilizará el manejador que se ha especificado de forma programática.
Los módulos de inicio de sesión que se especifican mediante la configuración de inicio de sesión de JAAS implementan una determinada tecnología de autenticación. Un módulo de inicio de sesión puede recopilar credenciales del usuario utilizando la interfaz
javax.security.auth.callback.CallbackHandler.
El perfil Liberty proporciona una implementación sin solicitud de la interfaz CallbackHandler, que se denomina
com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl.
Esta implementación permite que un desarrollador de aplicaciones especifique las credenciales directamente en la aplicación sin tener que solicitar información al usuario. Hay dos formas de especificar su implementación CallbackHandler:
- Especifique su implementación de forma programática, como argumento al constructor javax.security.auth.login.LoginContext; por ejemplo:
LoginContext logincontext = new LoginContext("ClientContainer", new WSCallbackHandlerImpl(“user”, "password"));
- Especifique su nombre de implementación en el descriptor de despliegue de módulos de aplicaciones cliente (application-client.xml); por ejemplo:
<callbackhandler>com.acme.callbackhandler.WSCallbackHandlerImpl/<callbackhandler>
Nota: La configuración de inicio de sesión de WSLogin no reconoce la segunda opción de especificar un manejador
CallbackHandler en el descriptor de despliegue.
Procedimiento
- Añada la característica appSecurityClient-1.0 a su archivo client.xml.
<feature>appSecurityClient-1.0</feature>
- Configure SSL para su cliente:
- Opcional: utilice el mandato securityUtility para crear un certificado SSL para el cliente; por ejemplo:
securityUtility createSSLCertificate --client=myClient --password=liberty
- Recomendado: utilice el mandato securityUtility para generar una contraseña xor codificada. Por ejemplo, para codificar la contraseña liberty:
securityUtility encode liberty
- Añada un elemento keyStore a su archivo client.xml.
El ejemplo siguiente utiliza la configuración SSL predeterminada_
<keyStore id="defaultKeyStore" password=“{xor}MzY9Oi0rJg==“/> <!-- pwd:
liberty -->
- En el código de aplicación, cree un Sujeto utilizando la configuración de inicio de sesión JAAS
ClientContainer y el manejador de devolución de llamada WSCallbackHandlerImpl.
- Antes de que la aplicación realice una solicitud de salida, añada el código siguiente. Cambie el valor de userName y de userPassword por credenciales válidas para un usuario que exista en el registro de usuarios del servidor de destino.
CallbackHandler wscbh = new WSCallbackHandlerImpl(“userName”, “userPassword”);
LoginContext ctx = null;
try {
ctx = new LoginContext(“ClientContainer”, wscbh);
} catch (LoginException le) {
le.printStackTrace();
}
try {
ctx.login();
} catch (LoginException le) {
le.printStackTrace();
}
Subject subject = ctx.getSubject();
- Establezca el Sujeto que se obtiene en el paso anterior de la hebra y utilice ese Sujeto para buscar un EJB. Utilice las API WSSubject.doAs o doAsPrivilieged para llevar a cabo esta acción. El Sujeto del bloque de códigos com.ibm.websphere.security.auth.WSSubject.doAs o com.ibm.websphere.security.auth.WSSubject.doAsPrivileged se utiliza para realizar comprobaciones de autorización de recursos
Java™ Platform, Enterprise Edition (J2EE).
WSSubject.doAs(subject, new PrivilegedAction() {
public Object run() {
try {
//Perform EJB lookup and invocation
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
});
Qué hacer a continuación
Al igual que en el servidor, puede utilizar un módulo de inicio de sesión personalizado para tomas más decisiones de autenticación o para añadir información al sujeto para tomar decisiones de autorización más precisas en la aplicación cliente.