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
- 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>
- 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.
- 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.
- 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.
- 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.