Anmeldung über eine Webanwendung anpassen
Sie können eine formularbasierte Anmeldeseite und eine Fehlerseite für die Authentifizierung eines Benutzers erstellen.
Vorbereitende Schritte
- HTTP-Basisauthentifizierung: Ein Web-Server fordert den Client auf, sich zu authentifizieren. Der Web-Client übergibt daraufhin im HTTP-Header eine Benutzer-ID und ein Kennwort.
- HTTPS-Clientauthentifizierung: Dieses Verfahren erfordert einen Benutzer (Web-Client), der ein Zertifikat mit einem öffentlichen Schlüssel besitzt. Der Web-Client sendet dieses Zertifikat an einen Web-Server, der die Clientzertifikate anfordert. Dies ist ein striktes Authentifizierungsverfahren, das das Protokoll HTTPS verwendet.
- Formularbasierte Authentifizierung: Bei diesem Authentifizierungsverfahren kann ein Entwickler die Darstellung und Funktionsweise der Anmeldeanzeigen steuern.
Bei der HTTP-Basisauthentifizierung wird das Benutzerkennwort in einfacher Base64-Codierung vom Web-Client zum Web-Server übertragen. Bei der formularbasierte Authentifizierung wird das Benutzerkennwort vom Browser unverschlüsselt zum Web-Server übertragen. Sowohl die HTTP-Basisauthentifizierung als auch die formularbasierte Authentifizierung sind demzufolge nicht sehr sicher, solange nicht HTTPS verwendet wird.
Der Implementierungsdeskriptor der Webanwendung enthält Informationen zu dem zu verwendenden Authentifizierungsverfahren. Wird die formularbasierte Authentifizierung verwendet, enthält der Implementierungsdeskriptor außerdem Einträge für eine Anmelde- und eine Fehlerseite. Eine Anmeldeseite kann eine HTML-Seite oder eine JSP-Datei sein. Diese Anmeldeseite wird auf der Web-Client-Seite angezeigt, wenn die Anwendung auf eine geschützte Ressource (Servlet, JSP-Datei, HTML-Seite) zugreift. Bei einem Authentifizierungsfehler wird eine Fehlerseite angezeigt. Sie können die Anmelde- und die Fehlerseite entsprechend den Anforderungen der Anwendung schreiben und die Darstellung und Funktionsweise dieser Seiten steuern. Wenn die Anwendung assembliert wird, kann der Assemblierende das Authentifizierungsverfahren für die Anwendung festlegen und die Anmelde- sowie die Fehlerseite im Implementierungsdeskriptor definieren.
- Zuerst zeigt die Methode sendRedirect die Seite mit dem Anmeldeformular im Web-Browser an. Später führt sie den Web-Browser dann zur ursprünglich angeforderten geschützten Seite zurück. Die Methode sendRedirect(String URL) weist den Web-Browser an, die im URL angegebene Seite mit der Anforderung HTTP GET abzurufen. Wenn HTTP POST die erste Anforderung an ein geschütztes Servlet oder eine geschützte JSP-Datei ist und keine frühere Authentifizierung oder Anmeldung durchgeführt wurde, wird die Anforderung HTTP POST nicht an die angeforderte Seite übermittelt. HTTP GET wird jedoch übergeben, weil die formularbasierte Anmeldung die Methode sendRedirect verwendet, die sich wie eine Anforderung HTTP GET verhält, die versucht, nach einer Anmeldung die angeforderte Seite anzuzeigen.
- HTTP POST ist in einem Szenario vorstellbar, bei dem ein ungeschütztes HTML-Formular Daten von Benutzern zusammenstellt und diese Daten dann zur Verarbeitung an geschützte Servlets oder JSP-Dateien übergibt. Die Benutzer haben sich in diesem Fall aber nicht für die Ressource angemeldet. Wenn Sie ein solches Szenario vermeiden möchten, strukturieren Sie Ihre Webanwendung oder Ihre Berechtigungen so, dass Benutzer gezwungen sind, ein Anmeldeformular auszufüllen, bevor die Anwendung HTTP POST für geschützte Servlets oder JSP-Dateien ausführt.
Vorgehensweise
Beispiel: Formularbasierte Anmeldung
- Formularbasierte Java-EE-Anmeldung
- Java-EE-Servletfilter mit Anmeldung
- IBM® Erweiterung: formularbasierte Anmeldung
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="text" name="j_password" autocomplete="off">
<\form>
Verwenden Sie das Eingabefeld j_username, um den Benutzernamen abzurufen, und das Eingabefeld j_password, um das Benutzerkennwort abzurufen.
Wenn der Web-Server eine Anforderung von einem Web-Client empfängt, sendet er die konfigurierte Formularseite an den Client und bewahrt die Originalanforderung auf. Nach dem Empfang der ausgefüllten Formularseite vom Web-Client extrahiert der Web-Server den Benutzernamen und das Kennwort aus dem Formular und authentifiziert den Benutzer. Wenn die Authentifizierung erfolgreich ist, leitet der Web-Server den Aufruf an die Originalanforderung um. Sollte die Authentifizierung fehlschlagen, leitet der Web-Server den Aufruf an die konfigurierte Fehlerseite um.
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title> FVT-Anmeldeseite für Sicherheit </title>
<body>
<h2>Formulargestützt Anmeldung</h2>
<FORM METHOD=POST ACTION="j_security_check">
<p>
<font size="2"> <strong> Benutzer-ID und Kennwort eingeben: </strong></font>
<BR>
<strong> Benutzer-ID</strong> <input type="text" size="20" name="j_username">
<strong> Kennwort </strong> <input type="password" size="20" name="j_password" autocomplete="off">
<BR>
<BR>
<font size="2"> <strong> Anschließend auf die folgende Schaltfläche klicken: </strong></font>
<input type="submit" name="login" value="Login">
</p>
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head><title>Es ist ein Authentifizierungsfehler bei der formulargestützten Anmeldung aufgetreten</head></title>
<body>
<H1><B>Es ist ein Authentifizierungsfehler bei der formulargestützten Anmeldung aufgetreten</H1></B>
<P>Die Authentifizierung kann aus vielen Gründen fehlschlagen. Mögliche Fehlerursachen:
<OL>
<LI>Die Benutzer-ID oder das Kennwort wurde falsch eingegeben (Tippfehler oder falsche Groß-/Kleinschreibung).
<LI>Die Benutzer-ID oder das Kennwort ist nicht vorhanden, ist abgelaufen oder inaktiviert.
</OL>
</P>
</body>
</html>
<login-config id="LoginConfig_1">
<auth-method>FORM<auth-method>
<realm-name>Example Form-Based Authentication Area</realm-name>
<form-login-config id="FormLoginConfig_1">
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
META-INF
META-INF/MANIFEST.MF
login.html
error.jsp
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/aServlet.class
Die formularbasierte Abmeldung ist ein Verfahren, das eine Abmeldung ermöglicht, ohne, dass alle Sitzungen des Web-Browsers geschlossen werden müssen. Nach der Abmeldung mit der formularbasierten Abmeldung müssen Sie sich beim Zugriff auf eine geschützte Webressource erneut authentifizieren. Dieses Feature wird von der J2EE-Spezifikation zwar nicht vorausgesetzt, aber als zusätzliches Feature in der Sicherheit von WebSphere Application Server bereitgestellt.
- Sie geben den URI des Abmeldeformulars im Web-Browser ein, und das Formular wird geladen.
- Sie klicken im Formular auf Übergeben, um sich abzumelden.
- Der Sicherheitscode von WebSphere Application
Server meldet den Benutzer ab. Während dieses Prozesses führt der Anwendungsserver
die folgenden Prozesse aus:
- Er löscht die LTPA/SSO-Cookies.
- Er macht die HTTP-Sitzung ungültig.
- Er entfernt den Benutzer aus dem Authentifizierungscache.
- Bei der Abmeldung werden Sie an eine Ausstiegsseite für die Abmeldung weitergeleitet.
Für die formularbasierte Abmeldung sind keine Attribute im Implementierungsdeskriptor erforderlich. Das Abmeldeformular ist eine HTML- oder JSP-Datei, die in der Webanwendung enthalten ist. Das Anmeldeformular gleicht im Prinzip anderen HTML-Formularen. Der einzige Unterschied ist der, dass es eine spezielle Sendeaktion enthält. Diese Sendeaktion wird vom Web-Container erkannt, der sie an ein spezielles internes WebSphere-Servlet für formularbasierte Abmeldung weiterleitet. Die Sendeaktion auf dem Abmeldeformular muss ibm_security_logout sein.
Sie können im Abmeldeformular eine Ausstiegsseite für die Abmeldung angeben. Diese Ausstiegsseite kann eine HTML- oder JSP-Datei in derselben Webanwendung sein, an die der Benutzer nach der Abmeldung umgeleitet wird. Außerdem können Sie für die Ausstiegsseite für die Abmeldung einen vollständig qualifizierten URL im Format http://Hostname:Port/URL angeben. Die Ausstiegsseite wird als Parameter im Abmeldeformular angegeben. Falls keine Ausstiegsseite für die Abmeldung angegeben ist, wird eine HTML-Standardnachricht zur Abmeldung an den Benutzer zurückgegeben.
<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title>Abmeldeseite </title>
<body>
<h2>Beispiel für formulargestützte Abmeldung</h2>
<FORM METHOD=POST ACTION="ibm_security_logout" NAME="logout">
<p>
<BR>
<BR>
<font size="2"><strong> Zum Abmelden auf die folgende Schaltfläche klicken: </strong></font>
<input type="submit" name="logout" value="Logout">
<INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/login.html">
</p>
</form>
</body>
</html>