Authorization Basic, HTTP-Authorization

Neu ist nicht was man damit machen kann sondern was man damit macht!

Gewöhnlich werden für URLs, deren Inhalte nur bestimmten Nutzern zugänglich sein sollen, eine zusätzliche Konfigurationsdatei .htaccess und eine Passwort-Datei im entsprechenden Verzeichnis angelegt:

AuthType Basic AuthName "Geheim" AuthUserFile /var/www/vhosts/.htpasswd Require valid-user

Wobei die Passwortdatei, hier .htpasswd genannt, die Benutzernamen mit den dazugehörigen Passworten beinhaltet. zum Erstellen und Bearbeiten dieser Datei dient das Apache-Utility htpasswd dessen Verwendung untenstehend gezeigt ist:

c:\var>htpasswd Usage: htpasswd [-cmdpsD] passwordfile username htpasswd -b[cmdpsD] passwordfile username password htpasswd -n[mdps] username htpasswd -nb[mdps] username password -c Create a new file. -n Don't update file; display results on stdout. -m Force MD5 encryption of the password (default). -d Force CRYPT encryption of the password. -p Do not encrypt the password (plaintext). -s Force SHA encryption of the password. -b Use the password from the command line rather than prompting for it. -D Delete the specified user. On Windows, NetWare and TPF systems the '-m' flag is used by default. On all other systems, the '-p' flag will probably not work.

Die Konfigurationsdatei .htaccess legt den AuthType fest, der hier in diesem Fall Basic lautet. AuthName gibt den sog. Realm an, mit diesem Namen kann der Browser die Zugangsdaten speichern sofern der Anwender das möchte. Mit dieser Konfiguration setzt der Browser beim ersten Aufruf der Seite folgende Header in die Response:

HTTP/1.1 Status 401 Authorization Required WWW-Authenticate: Basic realm="Geheim"

Was den Browser veranlasst einen Prompt hervorzubringen, also ein modales Formular in dem der Benutzer seinen Namen und sein Passwort einzugeben hat. Sofern diese Eingabe richtig ist, sendet der Browser bei allen folgenden Requests an die Authority (Domäne) einen zusätzlichen Header Authorization: Basic dXNlcjpwYXNz wobei der Parameter die Credentials user:pass base64 kodiert. Erst nach dem Beenden und Neustart der Browsersitzung wird dieser Header nicht mehr gesendet, hierzu muss der Anwender Benutzername und Passwort erneut eingeben.

HTTP Authorization ohne zusätzliche .htaccess

Die bisher beschriebene Konfiguration hat einige Nachteile. Zum Ersten sind zusätzliche Dateien erforderlich und eine zentrale Benutzerverwaltung, respektive Benutzergruppen ist nicht möglich. Des Weiteren erscheint der Prompt sofort in dem Moment wenn die Seite aufgerufen wird. Sollen Name und Passwort jedoch erst angefordert werden wenn der Benutzer auf einen Link zur Anmeldung klickt, müssen weitere Überlegungen angestellt werden. Zuerst muss dafür gesorgt werden, daß der vom Browser gesendete Authorization-Header in die Serverumgebung gesetzt wird, so daß ein nachfolgender Prozess Benutzername und Passwort bei jedem Request prüfen kann. Hierzu bewährt sich untenstehende Regel:

RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Damit stehen Benutzername und Passwort jedem CGI-Prozess zur Verfügung, im Klartext sind sie wie folgt erhältlich:

if( my $auth = $ENV{HTTP_AUTHORIZATION} ){ require MIME::Base64; my ($basic, $cred) = split /\s+/, $auth; ( $ENV{HTTP_USER}, $ENV{HTTP_PASS} ) = split ":", MIME::Base64::decode_base64($cred); } else{ ( $ENV{HTTP_USER}, $ENV{HTTP_PASS} ) = ('',''); }

Finessen

Steht mit einer Anmeldung der Benutzername zur Verfügung, ist es möglich, je nach Benutzername oder Benutzergruppe bestimmte Inhalte auszuliefern oder weitere Webanwendungen bereitzustellen die dann ohne Neuanmeldung in der Browsersession verfügbar sind. Zum Beispiel kann die Routingtable erweitert werden. Und natürlich ist es auch möglich, die Routingtable komplett auzutauschen. Das heißt daß man mit HTTP-Authorization eine Zugangskontrolle vom Programmcode vollständig trennen kann!

Sicherheitsbetrachtung

Es versteht sich von selbst, einen Secure Socket Layer (SSL) zu verwenden, also HTTPS anstelle HTTP. Mithin wird alles verschlüsselt übertragen was nicht an den URL angehängt wird, also sämtliche Header (Benutzername, Passwort) und natürlich der HTTP-Message-Body.

Kommentare: Authorization Basic, HTTP-Authorization

Rev.: 2023-06-03 13:43:57


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.