WebSphere Application Server unterstützt das deklarative Java™-EE-Sicherheitsmodell (Java Platform, Enterprise Edition). Mit dem Java-EE-Implementierungsdeskriptor
können Sie die Richtlinie für Authentifizierung
und Zugriffssteuerung definieren. Sie können auch einen Stack angepasster Anmeldemodule
erstellen, um die Authentifizierungsverfahren von WebSphere
Application Server anzupassen.
Vorbereitende Schritte
Ein angepasstes Anmeldemodul kann unter anderem
Principals und Berechtigungsnachweise zuordnen, angepasste Sicherheitstoken und
Berechtigungsnachweise verarbeiten und Fehlerbehandlungsschritte ausführen. Normalerweise benötigen Sie
für die Authentifizierungsfunktion keinen Anwendungscode. Falls Sie Authentifizierungsfunktionen in Anwendungscode ausführen müssen,
wenden Sie die hier beschriebenen Programmiertechniken an. Verwenden Sie grundsätzlich die deklarative Sicherheit.
Die in diesem Abschnitt beschriebenen Techniken sollten nur im Notfall verwendet werden.
Informationen zu diesem Vorgang
Wenn die Option SSO von LTPA (Lightweight Third-Party Authentication) aktiviert ist,
wird die Anmeldesitzung des Web-Clients nach erfolgter Anmeldung von einem
LTPA-SSO-Token-Cookie verfolgt. Bei der Abmeldung wird dieses Token gelöscht, um die Anmeldesitzung
zu beenden. Das Serversubjekt wird jedoch nicht gelöscht. Beim Modell der deklarativen Sicherheit
übernimmt der Web-Container von WebSphere
Application Server automatisch die Clientauthentifizierung und die Verwaltung der Anmeldesitzung. Sie können
die Authentifizierung im Anwendungscode durchführen, indem Sie eine Anmeldeseite ohne
Java-EE-Sicherheitsbeschränkung
definieren und Clientanforderungen zunächst zu Ihrer Anmeldeseite umleiten. Die Anmeldeseite
kann das Programmiermodell Java
Authentication and Authorization Service (JAAS) für die Authentifizierung verwenden.
Wenn die Webanmeldemodule von
WebSphere Application Server
SSO-Cookies generieren sollen, müssen Sie die folgenden Schritte ausführen.
Vorgehensweise
- Erstellen Sie eine neue JAAS-Anmeldekonfiguration für das System.
Klicken Sie zum Aufrufen dieser Anzeige auf
Sicherheit > Globale Sicherheit. Klicken Sie unter "Java Authentication
and Authorization Service" auf Systemanmeldungen.
- Klonen Sie die Anmeldekonfiguration WEB_INBOUND manuell, und ordnen Sie dem Klon einen neuen Aliasnamen zu. Zum Klonen der Anmeldekonfiguration
klicken Sie auf Neu. Geben Sie einen Namen für die Konfiguration ein, und klicken Sie anschließend auf
Anwenden. Klicken Sie unter "Weitere Eigenschaften" auf JAAS-Anmeldemodule.
Klicken Sie auf Neu, und konfigurieren Sie das JAAS-Anmeldemodul. Weitere Informationen finden Sie im Artikel Anmeldemoduleinstellungen für Java Authentication and Authorization Service. Der Web-Container von WebSphere
Application Server verwendet die Anmeldekonfiguration WEB_INBOUND für die Authentifizierung von
Web-Clients. Änderungen an der Anmeldekonfiguration WEB_INBOUND wirken sich auf alle Webanwendungen
in der Zelle aus. Klonen Sie zum Erstellen Ihrer eigenen Anmeldekonfiguration den Inhalt der
Anmeldekonfiguration WEB_INBOUND.
- Wählen Sie das Anmeldemodul wsMapDefaultInboundLoginModule aus, und klicken Sie anschließend auf
Angepasste Eigenschaften. In Ihrer Anmeldekonfiguration sind zwei Anmeldemodule definiert: ltpaLoginModule und
wsMapDefaultInboundLoginModule.
- Fügen Sie ein Anmeldeeigenschaft mit dem Namen cookie und dem
Wert true hinzu. Die beiden Anmeldemodule können jetzt
LTPA-SSO-Cookies generieren. Fügen Sie die Anmeldeoption "Cookie" auf keinen Fall
zur ursprünglichen Anmeldekonfiguration WEB_INBOUND hinzu.
- Ordnen Sie Ihre angepassten Anmeldemodule (LoginModule) im neuen Anmeldekonfigurationsstack an (optional).
- Verwenden Sie Ihre Anmeldeseite für eine programmgesteuerte Anmeldung, indem Sie mit der neu definierten
Anmeldekonfiguration eine JAAS-Anmeldung LoginContext.login ausführen.
Nach erfolgter Anmeldung generiert das ltpaLoginModule oder das wsMapDefaultInboundLoginModule bei erfolgreicher
Authentifizierung ein LTPA-SSO-Cookie. Welches der beiden LoginModules
das SSO-Cookie generiert, hängt von vielen Faktoren ab, z. B. von der Authentifizierungskonfiguration des Systems
und von Laufzeitbedingungen. (Eine ausführlichere Beschreibung würde hier zu weit führen.)
- Rufen Sie die modifizierte Methode WSSubject.setRunAsSubject auf, um das Subjekt zum Authentifizierungscache
hinzuzufügen. Das Subject muss ein von LoginModule erstelltes WebSphere Application Server-JAAS-Subject
sein. Durch das Hinzufügen des Subjekts zum Authentifizierungscache wird erneut ein Subjekt aus dem
SSO-Token erstellt.
- Verwenden Sie Ihre Seite für programmgesteuerte Abmeldung, um SSO-Cookies zu widerrufen, indem Sie die Methode
revokeSSOCookies in der Klasse WSSecurityHelper aufrufen.
Der Begriff "Cookies" wird verwendet, weil WebSphere Application
Server ab Version 5.1.1 ein neues
LTPA-SSO-Token mit einem anderen Verschlüsselungsalgorithmus unterstützt.
Aus Gründen der Abwärtskompatibilität
kann jedoch die Generierung des ursprünglichen LTPA-SSO-Token konfiguriert werden.
Beachten Sie, dass
sich das Subjekt noch immer im Authentifizierungscache befindet und nur die SSO-Cookies annulliert wurden.
Veraltetes Feature: Die Methode
"revokeSSOCookies(HttpServletRequest,
HttpServletResponse)" aus der Klasse
"WSSecurityHelper" wird nicht weiter unterstützt.
Verwenden Sie die Funktionalität, die mit der Methode
"logout()" von Java Servlet-3.0 bereitgestellt wird.
Lesen Sie hierzu Artikel
Servletsicherheitsmethoden.
depfeat
Beispiel
Verwenden Sie das folgende Codebeispiel, um die Authentifizierung durchzuführen.
Fehler vermeiden: Wenn Sie das Kennwort für die Factoryklasse "WSCallbackHandlerFactoryset"
zum Abrufen der Handler auf
null setzen, wie es folgenden Beispiel der Fall ist,
können Sie Identitätszusicherung ohne Kennwort verwenden.
gotcha
Suppose you wrote a LoginServlet.java:
Import com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
Import com.ibm.websphere.security.auth.WSSubject;
public Object login(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
PrintWriter out = null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e) {
// Fehlerbehandlung
}
Subject subject = null;
try {
LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
lc.login();
subject = lc.getSubject();
WSSubject.setRunAsSubject(subject);
} catch (Exception e) {
// Abfangen aller möglichen Ausnahmen, sofern Sie sie gesondert bearbeiten möchten
out.println("Exception in LoginContext login + Exception = " +
e.getMessage());
throw new ServletException(e.getMessage());
}
Der folgende Beispielcode widerruft die SSO-Cookies bei einer programmgesteuerten Abmeldung:
LogoutServlet.java:
public void logout(HttpServletRequest req, HttpServletResponse res,
Object retCreds) throws ServletException {
PrintWriter out =null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e) {
// Fehlerbehandlung
}
try {
WSSecurityHelper.revokeSSOCookies(req, res);
} catch (Exception e) {
// Abfangen aller möglichen Ausnahmen, sofern Sie sie gesondert bearbeiten möchten
out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
throw new ServletException(e);
}
}
Nächste Schritte
Weitere Informationen zur JAAS-Authentifizierung finden Sie im Artikel
Programmgesteuerte Anmeldungen mit JAAS entwickeln (Java Authentication and Authorization Service). Weitere Informationen zum Anmeldemodul
AuthenLoginModule finden Sie im Artikel
Beispiel: Serverseitige
JAAS-Authentifizierungs- und -Anmeldekonfiguration
anpassen (Java Authentication and Authorization Service).