Sobald eine Web Anwendung in der Lage ist Benutzer von anderen Benutzern zu unterscheiden, indem eine Session aufgebaut wird, prüfen Web Anwendungen normalerweise die Identität eines Benutzers. Der Prozess der Prüfung eines Konsumenten als authentisch wird als "Authentifizierung" bezeichnet. Authentifizierung besteht auf zwei getrennten Teilen: Einer Identität und einem Set von Zeugnissen. Es muss eine Variation von beidem in der Anwendung für die Bearbeitung vorhanden sein damit diese einen Benutzer authentifizieren kann.
Wärend die meisten üblichen Pattern der Authentifizierung um Benutzernamen und Passwörtern dreht, sollte erwähnt werden das dies nicht immer der Fall ist. Identitäten sind nicht auf Benutzernamen limitiert. Faktisch kann jeder öffentliche Identifikator verwendet werden: eine zugeordnete Nummer, Sozialversicherungsnummer, oder eine Wohnanschrift. Genauso sind Zeugnisse nicht auf Passwörter begrenzt. Zeugnisse können in Form von geschützten privaten Informationen kommen: Fingerabdrücke, Augen Retinascan, Passphrase, oder jede andere obskure personelle Information.
Im folgenden Beispiel verwenden wir Zend_Auth
um zu komplettieren
was möglicherweise die meist gelebte Form der Authentifizierung ist: Benutzername und
Passwort von einer Datenbank Tabelle. Dieses Beispiel nimmt an dass man die eigene
Anwendung bereits durch Verwendung von Zend_Application
eingerichtet hat, und das man in der Anwendung eine Datenbank Verbindung konfiguriert
hat.
Der Job der Zend_Auth
Klasse ist zweigeteilt. Erstens sollte Sie
in der Lage sein einen Authentifizierungs Adapter zu akzeptieren um einen Benutzer zu
authentifizieren. Zweitens sollte Sie, nach einer erfolgreichen Authentifizierung eines
Benutzers, durch jede und alle Abfragen persistent sein welche wissen müssen ob der
aktuelle Benutzer authentifiziert wurde. Um diese Daten zu persistieren verwendet
Zend_Auth
Zend_Session_Namespace
, man muss
aber generell nie mit diesem Session Objekt interagieren.
Angenommen wir haben die folgende Datenbanktabelle konfiguriert:
CREATE TABLE users ( id INTEGER NOT NULL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(32) NULL, password_salt VARCHAR(32) NULL, real_name VARCHAR(150) NULL )
Das oben stehende demonstriert eine Benutzertabelle welche einen Benutzernamen, ein Passwort und auch eine Passwort Salt Spalte enthält. Diese Salt Spalte wird als Teil einer Technik verwendet welche Salting genannt wird und die Sicherheit der Datenbank für Informationen gegen Brute Force Attacken erhöht welche auf den Algorithmus des Hashings vom Passwort abziehlt. Weitere Informationen über Salting.
Für diese Implementation müssen wir zuerst ein einfaches Formular erstellen welches
wir als "Login Formular" verwenden können. Wir nehmen Zend_Form
um das zu ermöglichen.
// Steht unter application/forms/Auth/Login.php class Default_Form_Auth_Login extends Zend_Form { public function init() { $this->setMethod('post'); $this->addElement( 'text', 'username', array( 'label' => 'Username:', 'required' => true, 'filters' => array('StringTrim'), )); $this->addElement('password', 'password', array( 'label' => 'Passwort:', 'required' => true, )); $this->addElement('submit', 'submit', array( 'ignore' => true, 'label' => 'Login', )); } }
Mit dem oben stehenden Formular können wir weitermachen und unsere Login Aktion für
unseren Authentifizierungs Controller erstellen. Dieser Controller wird
"AuthController
" genannt, und wird unter
application/controllers/AuthController.php
zu finden sein. Er wird
eine einzelne Methode enthalten welche "loginAction()
" heißt
und als selbst-übermittelnde Aktion fungiert. In anderen Worten, unabhängig davon ob
die Url mit POST oder mit GET geschickt wurde, wird diese Methode die Logik behandeln.
Der folgende Code demonstriert wie die richtigen Adapter erstellt und in das Formular integriert werden:
class AuthController extends Zend_Controller_Action { public function loginAction() { $db = $this->_getParam('db'); $loginForm = new Default_Form_Auth_Login($_POST); if ($loginForm->isValid()) { $adapter = new Zend_Auth_Adapter_DbTable( $db, 'users', 'username', 'password', 'MD5(CONCAT(?, password_salt))' ); $adapter->setIdentity($loginForm->getValue('username')); $adapter->setCredential($loginForm->getValue('password')); $result = $auth->authenticate($adapter); if ($result->isValid()) { $this->_helper->FlashMessenger('Erfolgreich angemeldet'); $this->redirect('/'); return; } } $this->view->loginForm = $loginForm; } }
Das entsprechende View Skript ist für diese Aktion recht einfach. Es setzt die aktuelle
Url da dieses Formular selbst bearbeitend ist, und zeigt das Formular an. Dieses View
Skript ist unter application/views/scripts/auth/login.phtml
zu
finden:
$this->form->setAction($this->url()); echo $this->form;
Das ist es. Mit diesen Grundsätzen kann man die generellen Konzepte erweitern um
komplexere Authentifizierungs Szenarien zu inkludieren. Für mehr Informationen über
andere Zend_Auth
Adapter sollte in das Referenz Handbuch gesehen werden.