Standardberechtigungstoken für die Weitergabe von Sicherheitsattributen verwenden
In diesem Artikel wird erläutert, wie WebSphere Application Server das Standardberechtigungstoken verwendet. Das Standardberechtigungstoken sollte verwendet werden, um Zeichenfolgeattribute hinzuzufügen, die an Downstream-Komponenten weitergegeben werden sollen.
Informationen zu diesem Vorgang
Allerdings müssen Sie darauf achten, dass die Attribute, die Sie dem Standardberechtigungstoken hinzufügen, spezifisch für den Benutzer sind, der dem authentifizierten Subject zugeordnet ist. Sind die Attribute nicht spezifisch für einen Benutzer, dann gehören sie vermutlich zum Weitergabe-Token, das ebenfalls mit der Anforderung weitergegeben wird. Weitere Informationen zum Weitergabe-Token finden Sie im Artikel Standardweitergabetoken für die Weitergabe von Sicherheitsattributen verwenden. Damit Sie dem Berechtigungstoken Attribute hinzufügen können, müssen Sie ein angepasstes Anmeldemodul in die verschiedenen konfigurierten Systemanmeldemodule integrieren. Jede Konfiguration eines Anmeldemoduls, in der die Implementierung com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule konfiguriert ist, kann weitergegebene Informationen empfangen und kann Weitergabeinformationen generieren, die an einen anderen Server gesendet werden können.
Werden der Anmeldekonfiguration beim ersten Anmelden keine weitergegebenen Attribute präsentiert, dann wird im Anmeldemodul wsMapDefaultInboundLoginModule ein Standardberechtigungstoken erstellt, nachdem die Anmeldung im Anmeldemodul ltpaLoginModule stattgefunden hat. Eine Referenz auf das Standardberechtigungstoken kann mit der Methode login unter Verwendung von sharedState hashmap angefordert werden. Sie müssen das angepasste Anmeldemodul nach der Implementierung von wsMapDefaultInboundLoginModule für WebSphere Application Server einsetzen, um das Standardberechtigungstoken zu sehen.
Weitere Informationen zum JAAS-Programmiermodell (Java™ Authentication and Authorization Service) finden Sie im Artikel "Sicherheit: Lernmaterial".
Vorgehensweise
Beispiel
public customLoginModule() { public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { // (Weitere Informationen zur Initialisierung finden Sie im Abschnitt // Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.) // Referenz auf die Map sharedState anfordern, die während der Initialisierung übergeben wird. _sharedState = sharedState; } public boolean login() throws LoginException { // (Nähere Informationen zu den während der Anmeldung auszuführen Aktionen finden Sie im Artikel // Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.) // Das Standard-AuthorizationToken im sharedstate lokalisieren. defaultAuthzToken = (com.ibm.wsspi.security.token.AuthorizationToken) sharedState.get (com.ibm.wsspi.security.auth.callback.Constants.WSAUTHZTOKEN_KEY); // Möglicherweise ist dies nicht immer generiert. Dies ist abhängig von der Anmeldekonfiguration. if (defaultAuthzToken != null) { try { // Ein angepasstes Attribut hinzufügen. defaultAuthzToken.addAttribute("key1", "value1"); // Alle Attribute und Werte ermitteln, die im Token existieren. java.util.Enumeration listOfAttributes = defaultAuthorizationToken. getAttributeNames(); while (listOfAttributes.hasMoreElements()) { String key = (String) listOfAttributes.nextElement(); String[] values = (String[]) defaultAuthorizationToken.getAttributes (key); for (int i=0; i<values.length; i++) { System.out.println ("Key: " + key + ", Value[" + i + "]: " + values[i]); } } // Das vorhandene Attribut uniqueID lesen. String[] uniqueID = defaultAuthzToken.getAttributes (com.ibm.wsspi.security.token.AttributeNameConstants. WSCREDENTIAL_UNIQUEID); // uniqueID aus String[] abrufen. String unique_id = (uniqueID != null && uniqueID[0] != null) ? uniqueID[0] : ""; // Das vorhandene Attribut expiration lesen. String[] expiration = defaultAuthzToken.getAttributes (com.ibm.wsspi.security.token.AttributeNameConstants. WSCREDENTIAL_EXPIRATION); // Beispiel für die Anforderung eines langen Werts für expiration aus dem Zeichenfolgebereich. long expire_time = 0; if (expiration != null && expiration[0] != null) expire_time = Long.parseLong(expiration[0]); // Das vorhandene Attribut für den Anzeigenamen (display name) lesen. String[] securityName = defaultAuthzToken.getAttributes (com.ibm.wsspi.security.token.AttributeNameConstants. WSCREDENTIAL_SECURITYNAME); // Den Anzeigenamen (display name) aus String[] abrufen. String display_name = (securityName != null && securityName[0] != null) ? securityName[0] : ""; // Das vorhandene Attribut longSecurityName lesen. String[] longSecurityName = defaultAuthzToken.getAttributes (com.ibm.wsspi.security.token.AttributeNameConstants. WSCREDENTIAL_LONGSECURITYNAME); // Den Wert für LongSecurityName aus String[] abrufen. String long_security_name = (longSecurityName != null && longSecurityName[0] != null) ? longSecurityName[0] : ""; // Das vorhandene Attribut group lesen. String[] groupList = defaultAuthzToken.getAttributes (com.ibm.wsspi.security.token.AttributeNameConstants. WSCREDENTIAL_GROUPS); // Die Gruppen (groups) aus String[] abrufen. ArrayList groups = new ArrayList(); if (groupList != null) { for (int i=0; i<groupList.length; i++) { System.out.println ("group[" + i + "] = " + groupList[i]); groups.add(groupList[i]); } } } catch (Exception e) { throw new WSLoginFailedException (e.getMessage(), e); } } } public boolean commit() throws LoginException { // (Weitere Informationen zu den Aktionen, die während der Festschreibung vorgenommen // werden müssen, finden Sie im Abschnitt // Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.) } private java.util.Map _sharedState = null; private com.ibm.wsspi.security.token.AuthorizationToken defaultAuthzToken = null; }.