EinführungZend_Auth bietet eine API für das Authentifizieren und enthält konkrete Authentifizierungs-Adapter für übliche Use Case Szenarien. Zend_Auth behandelt nur die Authentifizierung und nicht die Authorisierung. Authentifizierung ist lose definiert als das Ermitteln ob eine Entität aktuell das ist was Sie vorgibt zu sein (z.B. Identifizierung), basierend auf einem Set von Zeugnissen. Authorisierung, der Prozess des Entscheidens ob es einer Entität erlaubt wird auf andere Entitäten Zugriff zu erhalten, oder um auf diesen Operationen durchzuführen, ist ausserhalb der Möglichkeit von Zend_Auth. Für weitere Informationen über Authorisierung und Zugriffskontrolle mit dem Zend Framework, sollte Zend_Acl angeschaut werden.
AdapterEin Zend_Auth Adapter wird verwendet um sich gegenüber einem speziellen Typ von Authentifizierungs Services zu authentifizieren, wie LDAP, RDBMS, oder Datei-basierenden Speichern. Verschiedene Adapter besitzen leicht unterschiedliche Optionen und Verhaltensweisen, aber einige grundlegende Dinge sind für Authentifizierungs Adapter üblich. Zum Beispiel das die Authentifizierung Zeugnisse akzeptiert werden (enthält auch vorgegebene Identitäten), das Abfragen am Authentifizierungsservice durchgeführt werden, und das Ergebnisse zurückgegeben werden, sind für Zend_Auth Adapter üblich. Jede Zend_Auth Adapter Klasse implementiert Zend_Auth_Adapter_Interface. Dieses Interface definiert eine Methode, authenticate(), die eine Adapter Klasse implementieren muß um eine Authentifizierungsanfrage auszuführen. Jede Adapter Klasse muß vorher vorbereitet sein bevor authenticate() aufgerufen wird. Diese Vorbereitung des Adapters enthält das Setzen der Zeugnisse (z.B. Benutzername und Passwort) und die Definition von Werten für Adapter spezifische Konfigurationoptionen, wie Datenbank Verbindungsdaten für einen Datenbank Tabellen Adapter. Das folgende ist ein Beispiel eines Authentifierungs-Adapters der einen Benutzernamen und ein Passwort für die Authentifizierung benötigt. Andere Details, wie zum Beispiel der Authentifizierungs-Service abgefragt wird, werden der Kürze halber ausgelassen:
Wie im Docblock angegeben, muß authenticate() eine Instanz von Zend_Auth_Result (oder einer von Zend_Auth_Result abgeleiteten Klassen) zurückgeben. Wenn aus bestimmten Gründen eine Durchführung einer Authentifizierungs-Anfrage nicht möglich ist, sollte authenticate() eine Ausnahme werfen die von Zend_Auth_Adapter_Exception abgeleitet ist. ErgebnisseZend_Auth Adapter geben eine Instanz von Zend_Auth_Result mit Hilfe von authenticate() zurück um die Ergebnisse des Authentifizierungs-Versuches darzustellen. Adapter veröffentlichen das Zend_Auth_Result Objekt bei der Erstellung, so das die folgenden vier Methoden ein grundsätzliches Set von Benutzerbezogenen Operationen bieten die für die Ergebnisse von Zend_Auth Adapter üblich sind:
Ein Entwickler kann wünschen basierend auf dem Typ des Authentifizierungs-Ergebnisses zu verzweigen um spezialisiertere Operationen durchzuführen. Einige Operationen die für Entwickler nützlich sein können sind zum Beispiel das Sperren von Konten nachdem zu oft ein falsches Passwort angegeben wurde, das markieren von IP Adressen nachdem zuviele nicht existierende Identitäten angegeben wurden und das anbieten von speziellen, benutzerdefinierten Nachrichten für Authentifizierungs-Ergebnisse an den Benutzer. Die folgenden Ergebniscodes sind vorhanden:
Das folgende Beispiel zeigt wie ein Entwickler anhand des Ergebniscodes verzweigen könnte:
Dauerhafte IdentitätenEine Anfrage zu authentifizieren die Authentifizierungs Zeugnisse enthält ist per se nützlich, aber auch wichtig um die Authentifizierungs Identität bearbeiten zu können ohne das immer die Authentifizierungs Zeugnisse mit jeder Anfrage vorhanden sein müssen. Trotzdem ist HTTP ein statusloses Protokoll, und Techniken wie Cookies und Sessions wurden entwickelt um Stati über mehrere Anfragen hinweg in Server-seitigen Web Anwendungen zu erhalten. Normale Persistenz in PHP SessionsStandardmäßig bietet Zend_Auth dauerhafte Speicherung der Identität eines erfolgreichen Authentifizierungs Versuches durch Verwendung der PHP Session. Bei einem erfolgreichen Authentifizierungs Versuch speichert Zend_Auth::authenticate() die Identität des Authentifizierungs Ergebnisses im persistenten Speicher. Solange die Konfiguration nicht verändert wird, verwendet Zend_Auth eine Speicherklasse die Zend_Auth_Storage_Session heißt und die im Gegenzug Zend_Session verwendet. Eine eigene Klasse kann stattdessen verwendet werden, indem ein Objekt an Zend_Auth::setStorage() übergeben wird welches Zend_Auth_Storage_Interface implementiert.
Example #1 Den Namensraum der Session ändern Zend_Auth_Storage_Session verwendet einen Session Namensraum von 'Zend_Auth'. Diese Namensraum kann überschrieben werden indem ein anderer Wert an den Konstruktor von Zend_Auth_Storage_Session übergeben wird, und dieser Wert wird intern an den Konstruktor von Zend_Session_Namespace weitergereicht. Das sollte vor einem Versuch einer Authentifizierung stattfinden da Zend_Auth::authenticate() die automatische Speicherung der Identität durchführt.
Eigene Speicher implementierenZeitweise wollen Entwickler einen anderen Speichermechanismus für Identitäten verwenden als es von Zend_Auth_Storage_Session angeboten wird. Für solche Fälle können Entwickler einfach Zend_Auth_Storage_Interface implementieren und eine Instanz der Klasse an Zend_Auth::setStorage() übergeben. Example #2 Eine eigene Speicher Klasse verwenden Um eine andere Speicherklasse für die Persistenz von Identitäten zu verwenden als sie durch Zend_Auth_Storage_Session angeboten wird, können Entwickler Zend_Auth_Storage_Interface implementieren:
Um diese selbstgeschriebene Speicherklasse zu verwenden wird Zend_Auth::setStorage() aufgerufen bevor eine Authentifizierungsanfrage stattfindet:
VerwendungEs gibt zwei vorhandene Wege um Zend_Auth Adapter zu verwenden:
Das folgende Beispiel zeigt wie ein Zend_Auth Adapter indirekt verwendet werden kann, durch die Verwendung der Zend_Auth Klasse:
Sobald die Authentifizierung in einer Anfrage durchgeführt wurde, so wie im obigen Beispiel, ist es sehr einfach zu Prüfen ob eine erfolgreich authentifizierte Identität existiert:
Um eine Identität vom persistenten Speicher zu entfernen muß einfach die clearIdentity() Methode verwendet werden. Das würde typischerweise für die Implementierung einer "Abmelde" Operation in einer Anwendung Verwendung finden.
Wenn die automatische Verwendung von persistenten Speichern für einen bestimmten Verwendungszweck unangebracht ist, kann ein Entwickler einfach die Verwendung der Zend_Auth Klasse umgehen, und eine Adapter Klasse direkt verwenden. Die direkte Verwendung einer Adapterklasse enthält das Konfigurieren und Vorbereiten eines Adapter Objektes und den Aufruf dessen authenticate() Methode. Adapter-spezifische Details werden in der Dokumentation jeden Adapters besprochen. Das folgende Beispeil verwendet MyAuthAdapter direkt:
|