Datenbanktabellen AuthentifizierungEinführungZend_Auth_Adapter_DbTable bietet die Möglichkeit sich gegenüber Zeugnissen zu authentifizieren die in einer Datenbank Tabelle gespeichert sind. Weil Zend_Auth_Adapter_DbTable eine Instanz von Zend_Db_Adapter_Abstract benötigt, die an den Konstruktor übergeben wird, ist jede Instanz an eine spezielle Datenbank Verbindung verknüpft. Andere Konfigurationsoptionen können durch den Konstruktor gesetzt werden und durch die Methoden der Instanz. Eine für jede Option. Die vorhandenen Konfigurationsoptionen beinhalten:
Example #1 Grundsätzliche Verwendung Wie bereits in der Einführung beschrieben benötigt der Zend_Auth_Adapter_DbTable Konstruktor eine Instanz von Zend_Db_Adapter_Abstract die als Datenbank Verbindung fungiert zu welcher die Instanz des Authentifizierungs-Adapters gebunden ist. Zuerst sollte die Datenbankverbindung erstellt werden. Der folgende Code erstellt einen Adapter für eine In-Memory Datenbank, erstellt ein einfaches Datenbankschema, und fügt eine Zeile ein gegen die später eine Authentifizierungs-Abfrage durchgeführt werden kann. Dieses Beispiel benötigt die PDO SQLite Erweiterung:
Mit der Datenbankverbindung und den vorhandenen Tabellendaten, kann eine Instanz von Zend_Auth_Adapter_DbTable erstellt werden. Die Werte der Konfigurationsoptionen können dem Konstruktor übergeben werden, oder als Parameter der setzenden Methoden nach der Instanziierung:
An diesem Punkt ist die Instanz des Authentifizierungsadapters bereit um Authentifierungsabfragen zu akzeptieren. Um eine Authentifierungsabfrage zu formulieren, werden die Eingabezeugnis Werte dem Adapter vor dem Aufruf der authenticate() Methode, übergeben:
Zusätzlich zum Vorhandensein der getIdentity() Methode über das Authentifizierungs Ergebnisobjekt, unterstützt Zend_Auth_Adapter_DbTable auch das empfangen der Tabellenzeile wenn die Authentifizierung erfolgeich war:
Da die Zeile der Tabelle die Zeugnis Daten enthält ist es wichtig diese Werte gegenüber unberechtigten Versuchen abzusichern. Fortgeschrittene Verwendung: Ein DbTable Ergebnis Objekt dauerhaft machenStandardmäßig gibt Zend_Auth_Adapter_DbTable die unterstützte Identität an das Auth Objekt bei erfolgreicher Authentifizierung zurück. Ein anderes Verwendungs-Szenario, bei dem Entwickler ein Identitäts Objekt, welches andere nützliche Informationen enthält, in den dauerhaften Speichermechanismus von Zend_Auth abspeichern wollen, wird durch die Verwendung der getResultRowObject() Methode gelöst die ein stdClass Objekt zurück gibt. Der folgende Code Abschnitt zeigt diese Verwendung:
Fortgeschrittene Verwendung durch BeispieleWärend der primäre Zweck von Zend_Auth (und konsequenter Weise Zend_Auth_Adapter_DbTable) die Authentifizierung und nicht die Authorisierung ist, gibt es ein paar Instanzen und Probleme auf dem Weg welche Art besser passt. Abhängig davon wie man sich entscheidet ein Problem zu beschreiben, macht es manchmal Sinn, das was wie ein Authorisierungsproblem aussieht im Authentifizierungs-Adapter zu lösen. Mit dieser Definition, hat Zend_Auth_Adapter_DbTable einige eingebaute Mechanismen die für zusätzliche Checks während der Authentifizierungszeit angepasst werden können, um einige übliche Benutzerprobleme zu lösen.
Ein anderes Szenario kann die Implementierung eines Saltingmachanismus sein. Salting ist ein Ausdruck der auf eine Technik verweist welche die Sicherheit der Anwendung sehr stark erhöht. Sie basiert auf der Idee dass das Anfügen von zufälligen Strings bei jedem Passwort es unmöglich macht eine erfolgreiche Brute-Force Attacke auf die Datenbank durchzuführen bei der vorberechnete Hashwerte aus einem Verzeichnis genommen werden. Hierfür muß die Tabelle so modifiziert werden das Sie unseren Salt-String enthält:
Hier ist ein einfacher Weg um einen Salt String für jeden Benutzer bei der Registrierung zu erstellen: Und nun erstellen wir den Adapter:
Eine andere Alternative besteht darin die getDbSelect() Methode von Zend_Auth_Adapter_DbTable zu verwenden nachdem der Adapter erstellt wurde. Diese Methode gibt die Instanz des Zend_Db_Select Objekts zurück welches verwendet wird um die authenticate() Methode zu komplettieren. Es ist wichtig anzumerken das diese Methode immer das gleiche Objekt zurückgibt unabhängig davon ob authenticate() aufgerufen wurde oder nicht. Diese Objekt enthält keine Identity oder Anmeldeinformationen in sich da diese Werte im Select Objekt während des Ausführens von authenticate() platziert werden. Als Beispiel einer Situation könnte man die getDbSelect() Methode verwenden um den Status eines Benutzers zu prüfen, in anderen Worten sehen ob der Account des Benutzers aktiviert ist.
|