Anmeldung über eine Webanwendung anpassen

Sie können eine formularbasierte Anmeldeseite und eine Fehlerseite für die Authentifizierung eines Benutzers erstellen.

Vorbereitende Schritte

Ein Web-Client oder Browser kann folgende Verfahren verwenden, um einen Benutzer für einen Web-Server zu authentifizieren:
  • 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.

Die formularbasierte Anmeldung verwendet die Servletmethode sendRedirect, die für den Benutzer mehrere Auswirkungen hat. Die Methode sendRedirect wird während der formularbasierte Anmeldung zweimal verwendet:
  • 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.
Anmerkung: Stellen Sie sicher, dass die auf Ihrer Formularanmeldeseite enthaltenen Dateien (z. B. externe Style-Sheets oder Bilder) nicht geschützt sidn.

Vorgehensweise

  1. Erstellen Sie ein Anmeldeformular mit der Darstellung und Funktionsweise und den erforderlichen Elementen für die formularbasierte Authentifizierung.
  2. Erstellen Sie eine Fehlerseite. Sie können Fehlerseiten so programmieren, dass die Authentifizierung wiederholt oder eine entsprechende Fehlernachricht angezeigt wird.
  3. Stellen Sie die Anmeldeseite und Fehlerseite relativ zum Ausgangsverzeichnis in die Webarchivdatei (.war). Wurde die Anmeldeseite beispielsweise im Implementierungsdeskriptor als /login.html konfiguriert, sollte sie in das Stammverzeichnis der WAR-Datei gestellt werden. Der Assemblierende kann diesen Schritt auch mit einem Assembliertool ausführen.
  4. Erstellen Sie ein Abmeldeformular, und fügen Sie dieses nur dann in die Anwendung ein, wenn die Webanwendung ein formularbasiertes Authentifizierungsverfahren erfordert.

    Standardmäßig muss der URL der Abmeldeseite auf den Host, für den die Anforderung gestellt wurde, oder seine Domäne zeigen. Andernfalls wird eine generische Abmeldeseite angezeigt. Wenn Sie mit diesem URL auf einen anderen Host zeigen müssen, müssen Sie die Eigenschaft "com.ibm.websphere.security.logoutExitPageDomainList" in der Datei security.xml mit einer Liste von URLs definieren, die für die Anmeldeseite zulässig sind. Sie können die Option für die Verwendung jeder beliebigen Abmeldeseite auswählen, indem Sie die Eigenschaft "com.ibm.websphere.security.allowAnyLogoutExitPageHost" auf true setzen. Damit setzen Sie Ihr System jedoch potenziellen URL-Umleitungsattacken aus.

Beispiel: Formularbasierte Anmeldung

Sie können die Anmeldefunktionen von WebSphere Application Server verwenden, um Prozeduren für die formularbasierte Anmeldung zu implementieren und zu konfigurieren. Verwenden Sie die folgenden Technologien für die Anmeldefunktionalität von WebSphere Application Server und Java™ Platform, Enterprise Edition (Java EE):
  • Formularbasierte Java-EE-Anmeldung
  • Java-EE-Servletfilter mit Anmeldung
  • IBM® Erweiterung: formularbasierte Anmeldung
Das Beispiel für formularbasierte Anmeldung ist im Paket Technology Samples enthalten. Weitere Informationen zum Zugriff auf das formularbasierte Anmeldungsbeispiel finden Sie im Abschnitt "Auf die Beispiele zugreifen".
Verwendung der Formularanwendung
Damit die Authentifizierung ordnungsgemäß abläuft, muss die Aktion für die formularbasierte Anmeldung immer j_security_check sein. Das folgende Beispiel zeigt, wie das Formular als HTML-Seite codiert wird:
<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.

Das folgende Beispiel zeigt eine Anmeldeseite in HTML (login.html):
<!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>
Das folgende Beispiel zeigt eine Fehlerseite in einer JSP-Datei:
<!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>
Nachdem der Assembler die Webanwendung für die formularbasierte Authentifizierung konfiguriert hat, enthält der Implementierungsdeskriptor die folgende Anmeldekonfiguration:
<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>
Beispiel für die Verzeichnisstruktur einer WAR-Datei (WAR Application Archive) mit Anmelde- und Fehlerseiten für die obige Anmeldekonfiguration:
META-INF
     META-INF/MANIFEST.MF 
     login.html
     error.jsp
     WEB-INF/
     WEB-INF/classes/
     WEB-INF/classes/aServlet.class
Formularbasierte Abmeldung

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.

Angenommen, Sie möchten sich abmelden, nachdem Sie sich an einer Webanwendung angemeldet und einige Aktionen ausgeführt haben. Die formularbasierte Abmeldung funktioniert wie folgt:
  1. Sie geben den URI des Abmeldeformulars im Web-Browser ein, und das Formular wird geladen.
  2. Sie klicken im Formular auf Übergeben, um sich abzumelden.
  3. Der Sicherheitscode von WebSphere Application Server meldet den Benutzer ab. Während dieses Prozesses führt der Anwendungsserver die folgenden Prozesse aus:
    1. Er löscht die LTPA/SSO-Cookies.
    2. Er macht die HTTP-Sitzung ungültig.
    3. Er entfernt den Benutzer aus dem Authentifizierungscache.
  4. 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.

Im Folgenden finden Sie ein HTML-Beispielabmeldeformular. In diesem Formular ist eine Ausstiegsseite für Abmeldung konfiguriert, die den Benutzer nach der Abmeldung an die Anmeldeseite zurückleitet.
<!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>

Nächste Schritte

Wenn Sie die Anmelde- und Fehlerseite entwickelt haben, fügen Sie sie zur Webanwendung hinzu. Verwenden Sie zum Konfigurieren des Authentifizierungsverfahrens und Hinzufügen der entwickelten Anmelde- und Fehlerseite zum Implementierungsdeskriptor der Anwendung ein Assembliertool.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_pofolo
Dateiname:tsec_pofolo.html