Advanced   Java   Services
Authentication
back next up home

Authentication basics


Ein Client fordert beim Server eine Datei oder ein Verzeichnis an, für die (oder das) eine Authentifizierung notwendig ist. Für dieses paßwortgeschützte Objekt sendet der Client aber keine Authentifizierung. Mit einem Browser geschieht dies durch eine einfache GET-Anfrage:

Die erste GET-Anfrage ohne Authentifizierung (kann etwa so aussehen)

GET /protected.html HTTP/1.1
Host: 192.168.69.45
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1
Accept: text/html;q=0.9,text/plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Der Server verweigert den Zugriff auf das Objekt protected.html und sendet stattdessen eine Aufforderung an den Client, sich zu authentifizieren. Dazu setzt der Server den HTTP response code auf 401 (HTTP UNAUTHORIZED) und versieht den Antwortheader mit einem zusätzlichen Eintrag. Wie alle Headereinträge ist auch dieser von der Form HeaderName : HeaderValue. HeaderName ist jetzt das reservierte Wort "WWW-Authenticate", in HeaderValue wird der Algorithmus angegeben, nach dem der Client ein eingegebenes Paßwort zu verschlüsseln hat. Des weiteren steht in HeaderValue der Name des geschützten Bereichs. Aus diesem Namen sollte der (befugte) Client erschließen können, welchen Usernamen und welches Paßwort er einzugeben hat: WWW-Authenticate : BASIC realm="download-area".

Der ResponseHeader, der Authentifizierung verlangt (kann etwa so aussehen)

HTTP/1.1 401 Authorization Required
Date : Sat, 03 Jan 2004 09:16:46 GMT
Server : Apache/1.3.20 (Linux/SuSE) mod_ssl/2.8.4 OpenSSL/0.9.6b PHP/4.3.2 FrontPage/4.0.4.3
X-Powered-By : PHP/4.3.2
Expires : Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified : Sat, 03 Jan 2004 09:16:46 GMT
WWW-Authenticate : Basic realm="download-area"
Keep-Alive  :    timeout=15, max=100
Connection  :    Keep-Alive
Transfer-Encoding :    chunked
Content-Type   :    text/html

Im obigen Beispiel wird "BASIC" als Verschlüsselungsmethode vom Server gewünscht. Die Software des Client (in der Regel der Browser) reagiert mit der Darstellung eines modalen Fensters, in dem der Client nun einen Benutzernamen und ein Paßwort eingeben kann. Nach der Eingabe verschlüsselt der Browser das Paßwort gemäß der Vorgabe des Servers und schickt erneut eine GET-Anfrage, diesmal aber mit der verschlüsselten Eingabe des Client.

Die zweite GET-Anfrage mit Authentifizierung (kann etwa so aussehen)

GET /protected.html HTTP/1.1
Host: 192.168.69.45
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1
Accept: video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Authorization: Basic c3RyYXViOm1heA==


Die Auswertung der zweiten GET-Anfrage durch den Server

Der Server entschlüsselt nun das Paßwort. Ist es korrekt, so wird er die gewünschte Datei liefern, ist es falsch, so verschickt er erneut einen Responseheader, der Authentifizierung verlangt. Wie oft dieses call und response Schema durchlaufen wird, hängt sowohl vom Browser wie auch vom Server ab. Zusammen mit dem Header, der Authentifizierung verlangt, wird immer auch ein Body verschickt, der im Falle des Verwerfens der Anfrage eine kurze Erklärung enthält.

Der vom Server mit der Aufforderung zur Authentifizierung verschickte Body (kann etwa so aussehen)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>401 Authorization Required</title>
</head>
<body>
<h1>Authorization Required</h1>
This server could not verify that you are authorized to access the document
requested.  Either you supplied the wrong credentials (e.g., bad password),
or your browser doesn't understand how to supply the credentials required.
</body>
</html>

Mißlingt die Authentifizierung, so wird vom Browser dieser body folgendermaßen dargestellt:

Authorization Required

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.


Im folgenden werden die einfache BASIC und die sehr viel raffiniertere DIGEST Verschlüsselung für Servlets beschrieben.

top back next up home