2.2 Auth_HTTP 

Besprochene Version: 2.1.4 | Lizenz: PHP-Lizenz 2.02 |
Klassendatei(en): Auth/Http.php |
Das Paket Auth_HTTP ist auch wie Auth zur Authentifizierung von Benutzern gedacht. Bei genauer Betrachtung handelt es sich auch nicht um ein eigenständiges Paket, sondern um eine Erweiterung von Auth. Und zwar stellt Auth_HTTP Funktionalitäten zur Verfügung, mit denen das Passwort und der Benutzername auf Basis des http-Protokolls erfragt werden können. Zur Abfrage der Daten öffnet das Paket ein Fenster, ähnlich wie es passieren würde, wenn Sie eine serverseitige Passwortabfrage (z. B. per .htaccess-Datei) einrichten würden. Die Passwortabfrage basiert also somit auf RFC 2617.
Auch bei diesem Paket ist die Nutzung denkbar einfach. Zur Speicherung der Benutzerdaten können die Container benutzt werden, die in Kapitel 1.2 erwähnt wurden. Im folgenden Beispiel finden Sie eine datenbankbasierte Authentifikation.
require_once("Auth/HTTP.php"); // DSN definieren $dsn = "mysql://netviser:geheim@localhost/netviser"; // Definieren eines Arrays mit Optionen $opts = array ('dsn' => $dsn, 'authType' => 'basic' ); // Neues Objekt ableiten $my_auth = new Auth_HTTP("DB", $opts); // Name des Bereichs festlegen, in den sich der User einloggt $my_auth->setRealm('Interner Bereich'); // Text, der beim Fehlschlag ausgegeben wird $my_auth->setCancelText('<h2>Nicht berechtigt</h2>'); // Authentifikation starten $my_auth->start(); // Hat der User sich korrekt eingeloggt? if(true == $my_auth->getAuth()) { echo "Hallo $my_auth->username <br />Sie sind eingeloggt"; };
Listing 2.4 Authentifikation über das http-Protokoll
Sie sehen, dass die Authentifikation mit diesem Paket der Vorgehensweise von Auth sehr ähnlich ist. Der Konstrukor erwartet als ersten Parameter den Namen des Containers und als zweiten die Optionen für den Container. In diesem Fall habe ich wieder DB genutzt. Die Tabelle in der Datenbank hat denselben Aufbau wie bei Auth beschrieben.
Der DSN muss allerdings in einem Array übergeben werden, da der Konstruktor die Information braucht, welcher Authentifizierungstyp genutzt werden soll. In diesem Fall hat der Schlüssel 'authType' den Wert 'basic', womit eine Basic-Authentifikation initiiert wird. Alternativ können Sie natürlich auch eine Digest-Authentifikation nutzen, wenn Sie den String 'digest' übergeben.
Um eine korrekte Passwort-Abfrage im Browser darstellen zu können, sollten Sie auch einen Namen für den geschützten Bereich (Realm engl. für »Bereich«) angeben, was mit der Methode setRealm() geschieht. Hilfreich ist es auch, wenn Sie mit setCancelText() noch einen Text festlegen, der ausgegeben wird, wenn der Login-Vorgang nicht erfolgreich war oder abgebrochen wurde.
In Abbildung 2.1 sehen Sie die Ausgabe des Scripts im Browser. Der Text, der hinter dem Login-Fenster angezeigt wird, resultiert aus einem vorangegangenen Login-Versuch, der nicht erfolgreich war.
Ansonsten können Sie dieselben Features nutzen, wie das auch bei Auth der Fall ist, da diese Klasse wirklich nur eine Erweiterung zu Auth darstellt.
Abbildung 2.1 Authentifikationsfenster im Browser