Sie können das JAAS-Anmeldeframework (Java Authentication and Authorization Service) verwenden,
um die Authentifizierungsdaten von Ihrer Anwendung abzurufen.
Informationen zu diesem Vorgang
Ihre Anwendung kann eine programmsteuerte JAAS-Anmeldung unter Verwendung des JAAS-Kontexteintragsnamens
DefaultPrincipalMapping durchführen, um ein Subject-Objekt mit einer
javax.resource.spi.security.PasswordCredential-Instanz im privaten Berechtigungsnachweissatz abrufen,
der den für ein Element des Typs authData
definierten Benutzernamen und das zugehörige Kennwort definiert.
- Fügen Sie die Features appSecurity-2.0 und passwordUtilities-1.0 der Datei server.xml hinzu. Beispiel:
<featureManager>
<feature>appSecurity-2.0</feature>
<feature>passwordUtilities-1.0</feature>
</featureManager>
- Konfigurieren Sie ein Element des Typs authData in der Datei server.xml. Beispiel:
<authData id="myAuthData" user="myUser" password="myPassword"/> <!-- Das Kennwort kann auch codiert werden -->
Verschlüsseln Sie das Kennwort in der Konfiguration. Sie können den codierten Wert mit dem Befehl "securityUtility encode" abrufen.
- Führen Sie eine programmsteuerte Anmeldung mit dem JAAS-Anmeldekontexteintragsnamen DefaultPrincipalMapping
über Ihr Anwendungsservlet oder Ihre Enterprise-Bean durch und ersetzen Sie dabei den Zuordnungsalias durch den erforderlichen Alias.
Beispiel:
HashMap map = new HashMap();
map.put(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS, "myAuthData"); // Wert durch eigenen Alias ersetzen.
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();
Anmerkung: Der Einfachheit halber wird die Fehlerbehandlung nicht angezeigt. Eine Ausnahme des Typs
javax.security.auth.login.LoginException wird zurückgegeben, wenn der angeforderte Authentifizierungsalias
nicht vorhanden oder fehlerhaft ist.
- Rufen Sie den Benutzernamen und das Kennwort von PasswordCredential ab. Beispiel:
String userName = passwordCredential.getUserName();
char[] password = passwordCredential.getPassword();
// Benutzername und Kennwort verwenden.
- Wenn die Java-2-Sicherheit aktiviert ist, muss die Anwendung die Berechtigung
javax.security.auth.PrivateCredentialPermission haben. Erteilen Sie die Berechtigung beispielsweise in der Datei META-INF/permissions.xml der Anwendung, um auf das Objekt
PasswordCredential zuzugreifen:
<?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>
<!-- Weitere Berechtigungen -->
</permissions>
Weitere Informationen zur Java-2-Sicherheit finden Sie unter Liberty: Java-2-Sicherheit.