| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20876 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.multiuser.authentication">
- <title>Benutzer im Zend Framework authentifizieren</title>
- <sect2 id="learning.multiuser.authentication.intro">
- <title>Einführung in die Authentifizierung</title>
- <para>
- 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.
- </para>
- <para>
- 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.
- </para>
- </sect2>
- <sect2 id="learning.multiuser.authentication.basic-usage">
- <title>Grundsätzliche Verwendung von Zend_Auth</title>
- <para>
- Im folgenden Beispiel verwenden wir <classname>Zend_Auth</classname> 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 <classname>Zend_Application</classname>
- eingerichtet hat, und das man in der Anwendung eine Datenbank Verbindung konfiguriert
- hat.
- </para>
- <para>
- Der Job der <classname>Zend_Auth</classname> 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
- <classname>Zend_Auth</classname> <classname>Zend_Session_Namespace</classname>, man muss
- aber generell nie mit diesem Session Objekt interagieren.
- </para>
- <para>
- Angenommen wir haben die folgende Datenbanktabelle konfiguriert:
- </para>
- <programlisting language="php"><![CDATA[
- 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
- )
- ]]></programlisting>
- <para>
- 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. <ulink
- url="http://en.wikipedia.org/wiki/Salting_%28cryptography%29">Weitere
- Informationen</ulink> über Salting.
- </para>
- <para>
- Für diese Implementation müssen wir zuerst ein einfaches Formular erstellen welches
- wir als "Login Formular" verwenden können. Wir nehmen <classname>Zend_Form</classname>
- um das zu ermöglichen.
- </para>
- <programlisting language="php"><![CDATA[
- // 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',
- ));
- }
- }
- ]]></programlisting>
- <para>
- Mit dem oben stehenden Formular können wir weitermachen und unsere Login Aktion für
- unseren Authentifizierungs Controller erstellen. Dieser Controller wird
- "<classname>AuthController</classname>" genannt, und wird unter
- <filename>application/controllers/AuthController.php</filename> zu finden sein. Er wird
- eine einzelne Methode enthalten welche "<methodname>loginAction()</methodname>" 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.
- </para>
- <para>
- Der folgende Code demonstriert wie die richtigen Adapter erstellt und in das Formular
- integriert werden:
- </para>
- <programlisting language="php"><![CDATA[
- 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;
- }
- }
- ]]></programlisting>
- <para>
- 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 <filename>application/views/scripts/auth/login.phtml</filename> zu
- finden:
- </para>
- <programlisting language="php"><![CDATA[
- $this->form->setAction($this->url());
- echo $this->form;
- ]]></programlisting>
- <para>
- 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 <classname>Zend_Auth</classname> Adapter sollte in <link
- linkend="zend.auth">das Referenz Handbuch</link> gesehen werden.
- </para>
- </sect2>
- </sect1>
|