Liberty-Repository[8.5.5.6 oder höher]

Angepassten JASPIC-Authentifizierungsprovider für das Liberty-Profil entwickeln

Sie können einen angepassten Java™ Authentication SPI for Containers (JASPIC)-Authentifizierungsprovider entwickeln, indem Sie Klassen erstellen, die die erforderlichen in der JSR 196 (Java Specification Request) für die Spezifikation "Java Authentication Service Provider Interface for Containers" aufgeführten Schnittstellen implementieren.

Vorbereitende Schritte

Prüfen Sie die spezifischen Schnittstellenimplementierungsanforderungen für JASPIC-Authentifizierungsprovider und -Module in der JSR 196 (Java Specification Request) für die Spezifikation "Java Authentication Service Provider Interface for Containers".

Informationen zu diesem Vorgang

WebSphere Application Server Liberty Profile unterstützt die Verwendung von Authentifizierungsprovidern anderer Anbieter, die mit dem in Java Authentication SPI for Containers (JASPIC) Version 1.1 definierten Servlet-Container-Profil kompatibel sind.

Das Servlet-Container-Profil definiert Schnittstellen, die von der Sicherheitslaufzeitumgebung in Zusammenarbeit mit dem Web-Container in WebSphere Application Server verwendet werden, um Authentifizierungsmodule aufzurufen, bevor und nachdem eine Webanforderung von einer Anwendung verarbeitet wird. Eine Authentifizierung mit JASPIC-Modulen wird nur ausgeführt, wenn JASPIC in der Sicherheitskonfiguration aktiviert ist.

Wenn Sie einen angepassten Authentifizierungsprovider entwickeln möchten, erstellen Sie Klassen, die die erforderlichen, in der JSR 196 (Java Specification Request) für die Spezifikation "Java Authentication Service Provider Interface for Containers" aufgeführten Schnittstellen implementieren. Ein Provider kann ein oder mehrere Authentifizierungsmodule für die Authentifizierung verwenden. Module können Callbacks verwenden, um die Authentifizierung durchzuführen, oder sie können die notwendigen Benutzeridentitätsinformationen dem Clientsubjekt manuell hinzufügen.

Vorgehensweise

  1. Erstellen Sie eine Klasse, die die Schnittstelle javax.security.auth.message.config.AuthConfigProvider implementiert.
    Die Implementierungsklasse AuthConfigProvider muss einen öffentlichen, aus zwei Argumenten bestehenden Konstruktor und die öffentliche Methode getServerAuthConfig definieren:
    import java.util.Map;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.config.AuthConfigFactory;
    import javax.security.auth.message.config.AuthConfigProvider;
    import javax.security.auth.message.config.ServerAuthConfig;
    
    public class SampleAuthConfigProvider implements AuthConfigProvider {
    
            public SampleAuthConfigProvider(Map<String, String> properties, AuthConfigFactory factory) {
                    ...
            }
            public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler)
                    throws AuthException {
                    ...
            }
    }

    Eine Instanz der Implementierungsklasse AuthConfigProvider wird von WebSphere Application Server verwendet, wenn eine Anforderung zur Verarbeitung durch das Webmodul der Anwendung eingeht. Die Methode getServerAuthConfig wird verwendet, um eine ServerAuthConfig-Instanz abzurufen. Das Argument CallbackHandler in der Methode wird vom Modul authentication verwendet.

  2. Erstellen Sie eine Klasse, die die Schnittstelle javax.security.auth.message.config.ServerAuthConfig implementiert.
    Die Implementierungsklasse ServerAuthConfig muss die öffentlichen Methoden getAuthContextID und getAuthContext definieren:
    import java.util.Map;
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.config.ServerAuthConfig;
    import javax.security.auth.message.config.ServerAuthContext;
    
    public class SampleServerAuthConfig implements ServerAuthConfig {
    
            public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException {
                    ...
            }
            public ServerAuthContext getAuthContext(String authContextID, Subject serviceSubject, Map properties) 
                    throws AuthException {
                    ...
            }
    }

    Die Methoden getAuthContextID und getAuthContext in der Implementierungsklasse ServerAuthConfig werden verwendet, um eine ServerAuthContext-Instanz abzurufen.

  3. Erstellen Sie eine Klasse, die die Schnittstelle javax.security.auth.message.config.ServerAuthContext implementiert.
    Die Implementierungsklasse ServerAuthContext muss die öffentlichen Methoden validateRequest und secureResponse definieren:
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.config.ServerAuthContext;
    
    public class SampleServerAuthContext implements ServerAuthContext {
    
            public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
            public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
    }

    Die Methode validateRequest in der Implementierungsklasse ServerAuthContext wird verwendet, um das Modul aufzurufen, das die empfangene Webanforderungsnachricht authentifiziert. Wenn die Authentifizierung erfolgreich verlaufen ist, teilt der Web-Container die empfangene Webanforderungsnachricht zu, die das Zielwebmodul in der Anwendung verarbeitet. Ist die Authentifizierung nicht erfolgreich verlaufen, wird die Anforderung mit dem entsprechenden Antwortstatus zurückgewiesen.

  4. Erstellen Sie eine Klasse, die die Schnittstelle javax.security.auth.message.module.ServerAuthModule implementiert.
    Die Implementierungsklasse ServerAuthModule muss die öffentlichen Methoden initialize, validateRequest und secureResponse definieren:
    import javax.security.auth.Subject;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.MessagePolicy;
    import javax.security.auth.message.module.ServerAuthModule;
    
    public class SampleAuthModule implements ServerAuthModule {
    
            public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, Map options) 
                    throws AuthException {
                    ...
            }
    
            public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject)
                    throws AuthException {
                    ...
            }
    
            public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
    
            public void cleanSubject(MessageInfo messageInfo, Subject subject) 
                    throws AuthException {
                    ...
            }
    }

    Die Methode initialize in der Implementierungsklasse ServerAuthModule wird von der Implementierungsklasse ServerAuthContext aufgerufen, um das Modul authentication zu initialisieren und der ServerAuthContext-Instanz zuzuordnen.

    Die Methoden validateRequest und secureResponse in dieser Klasse werden verwendet, um die Schnittstellen javax.servlet.http.HttpServletRequest und javax.servlet.http.HttpServletResponse, die in der empfangenen javax.security.auth.message.MessageInfo enthalten sind, zu authentifizieren. Diese Methoden können die in der Methode initialize empfangene CallbackHandler-Instanz verwenden, um mit der WebSphere-Sicherheitslaufzeit zwecks Validierung eines Benutzerkennworts und mit der aktiven Benutzerregistry zwecks Abruf einer eindeutigen ID und eventueller Gruppenzugehörigkeiten eines Benutzers zu interagieren. Die abgerufenen Daten werden in eine Hashtable in der Gruppe privater Berechtigungsnachweise im Clientsubjekt gestellt. Die WebSphere Application Server-Implementierung des CallbackHandler unterstützt die folgenden drei Callbacktypen:
    • • CallerPrincipalCallback
    • • GroupPrincipalCallback
    • • PasswordValidationCallback

    WebSphere Application Server erwartet, dass die Namenswerte, die mit den Methoden PasswordValidationCallback.getUsername() und CallerPrincipalCallback.getName() abgerufen werden, identisch sind. Ist das nicht der Fall, treten unerwartete Ereignisse ein. Die Methode handle() des CallbackHandler verarbeitet nacheinander alle Callbacks, die im Argument array der Methode angegeben sind. Daher ist der Namenswert, der in den privaten Berechtigungsnachweisen des Clientsubjekts definiert ist, mit dem Namenswert aus dem letzten verarbeiteten Callback identisch.

    Wenn CallbackHandler nicht vom Authentifizierungsmodul verwendet wird und validateRequest einen Status zurückgibt, der die erfolgreiche Ausführung anzeigt, setzt WebSphere Application Server voraus, dass eine Hashtable-Instanz mit Benutzeridentitätsinformationen in das clientSubject eingeschlossen wird, so dass eine angepasste Anmeldung durchgeführt werden kann, um die Berechtigungsnachweise für den Benutzer zu erhalten. Diese Hashtable-Instanz kann dem Clientsubjekt wie im folgenden Beispiel dargestellt hinzugefügt werden:
    import java.util.Hashtable;
    import java.util.String;
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import com.ibm.wsspi.security.registry.RegistryHelper;
    import com.ibm.wsspi.security.token.AttributeNameConstants.AttributeNameConstants;
    
    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject)
           throws AuthException {
           ...
           UserRegistry reg = RegistryHelper.getUserRegistry(null);
           String uniqueid = reg.getUniqueUserID(username);
    
           Hashtable hashtable = new Hashtable();
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uniqueid);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_PASSWORD, password);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_GROUPS, groupList); //optional
           clientSubject.getPrivateCredentials().add(hashtable);
           ...
    }

    Für weitere Informationen zu den Hashtable-Voraussetzungen und zur angepassten Anmeldung finden Sie unter Angepasste JAAS-Anmeldemodule für eine Systemanmeldekonfiguration entwickeln.


Symbol das den Typ des Artikels anzeigt. Taskartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 25.08.2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_develop_jaspic
Dateiname: twlp_develop_jaspic.html