Configuración de un inicio de sesión programático JAAS en el contenedor de clientes de aplicaciones de Liberty

El contenedor de cliente de aplicaciones de Liberty se puede configurar para utilizar un inicio de sesión programático JAAS.

Antes de empezar

Revise las diferentes maneras de autenticar usuarios en el contenedor de clientes de aplicaciones y decida si la opción de inicio de sesión programático es mejor para su entorno. Para obtener más detalles, consulte Autenticación en el contenedor de clientes de aplicaciones de Liberty.

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 proporciona 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 de 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 del módulo 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. 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 del módulo de aplicación 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

  1. Añada la característica appSecurityClient-1.0 a su archivo client.xml.
    <feature>appSecurityClient-1.0</feature>
  2. Configure SSL para su cliente:
    1. Opcional: utilice el mandato securityUtility para crear un certificado SSL para el cliente; por ejemplo:
      securityUtility createSSLCertificate --client=myClient --password=liberty
    2. Recomendado: utilice el mandato securityUtility para generar una contraseña xor codificada. Por ejemplo, para codificar la contraseña liberty:
      securityUtility encode liberty
    3. 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 -->
  3. 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.
    1. 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();
  4. 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;
        }
    });
  5. Si se ha habilitado la seguridad de Java 2 en su cliente y su código de aplicación invoca las API JAAS o de seguridad de Liberty, añada los permisos de seguridad de Java 2 necesarios en el archivo permissions.xml o en el archivo client.xml de la aplicación. Para obtener más detalles acerca de qué API de seguridad de Liberty están protegidas mediante permisos de seguridad Java 2, consulte Programming Interfaces (API). Para obtener más información, consulte Seguridad de Java 2.

Qué hacer a continuación

Al igual que en el servidor, puede utilizar un módulo de inicio de sesión personalizado para tomar 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. Para obtener más información, consulte Configuración de un inicio de sesión personalizado de JAAS en el contenedor de clientes de aplicación de Liberty.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_config_jaas_prog_login.html