Desarrollo de un inicio de sesión programático para obtener datos de autenticación

Puede utilizar la infraestructura de inicio de sesión de JAAS (Java Authentication and Authorization Service) para obtener los datos de autenticación de la aplicación.

Acerca de esta tarea

La aplicación puede realizar un inicio de sesión programático JAAS utilizando el nombre de entrada de contexto de JAAS DefaultPrincipalMapping para obtener un objeto de sujeto con una instancia javax.resource.spi.security.PasswordCredential en el conjunto de credenciales privadas que contiene el nombre de usuario y la contraseña configurados para un elemento authData.

Procedimiento

  1. Añada las características appSecurity-2.0, passwordUtilities-1.0 y jca-1.7 en el archivo server.xml. También puede añadir appSecurity-2.0, passwordUtilities-1.0 y jca-1.6. Por ejemplo:
    <featureManager>
       <feature>appSecurity-2.0</feature>
       <feature>passwordUtilities-1.0</feature>
       <feature>jca-1.7</feature>
    </featureManager>
  2. Configure un elemento authData en el archivo server.xml. Por ejemplo:
    <authData id="myAuthData" user="myUser" password="myPassword"/> <!-- la contraseña también se puede codificar -->
    
    Codifique la contraseña en la configuración. Puede
    obtener el valor codificado utilizando el mandato de codificación securityUtility.
  3. Realice un inicio de sesión programático con el nombre de entrada de contexto de inicio de sesión de JAAS DefaultPrincipalMapping del servlet de aplicación o enterprise bean, sustituyendo el alias de correlación con el que necesita. Por ejemplo:
    HashMap map = new HashMap();
    map.put(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS, "myAuthData"); // Sustituir valor por el alias.
    CallbackHandler callbackHandler = new com.ibm.wsspi.security.auth.callback.WSMappingCallbackHandler(map, null);
    LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
    loginContext.login();
    Subject subject = loginContext.getSubject();
    Set<javax.resource.spi.security.PasswordCredential> creds = subject.getPrivateCredentials(javax.resource.spi.security.PasswordCredential.class);
    PasswordCredential passwordCredential = creds.iterator().next();
    Nota: Para simplificar, no se muestra el manejo de errores. Se devuelve una javax.security.auth.login.LoginException si el alias de autenticación solicitado no existe o está mal formado.
  4. Obtenga el nombre de usuario y la contraseña de PasswordCredential. Por ejemplo:
    String userName = passwordCredential.getUserName();
    char[] password = passwordCredential.getPassword();
    // Realizar algo con el nombre de usuario y la contraseña.
  5. Si la seguridad de Java 2 está habilitada, se debe otorgar javax.security.auth.PrivateCredentialPermission a la aplicación. Por ejemplo, otorgue el permiso en el archivo META-INF/permissions.xml de la aplicación para acceder al objeto PasswordCredential:
    <?xml version="1.0" encoding="UTF-8"?>
    <permissions xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/permissions_7.xsd" version="7">
    
      <permission>
        <class-name>javax.security.auth.PrivateCredentialPermission</class-name>
        <name>javax.resource.spi.security.PasswordCredential * "*"</name>
        <actions>read</actions>
      </permission>
    
      <!-- Otros permisos -->
    
    </permissions>

    Para obtener más información sobre la seguridad de Java 2, consulte Liberty: Seguridad de Java 2.


Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_dev_prog_login_auth_data
Nombre de archivo:twlp_dev_prog_login_auth_data.html