| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.auth.adapter.openid">
- <title>Open ID Authentifikation</title>
- <sect2 id="zend.auth.adapter.openid.introduction">
- <title>Einführung</title>
- <para>
- Der <classname>Zend_Auth_Adapter_OpenId</classname> Adapter kann verwendet werden um
- Benutzer durch Verwendung eines entfernten OpenID Servers zu authentifizieren. Diese
- Authentifizierungsmethode nimmt an das Benutzer nur ihre OpenID Identität an die Web
- Anwendung übermitteln. Dann werden Sie zu Ihrem OpenID Anbieter umgeleitet um die
- Eigentümerschaft der Identität mit Hilfe eines Passwortes oder einer anderen Methode zu
- prüfen. Dieses Passwort wird der Web Anwendung nie bekannt gegeben.
- </para>
- <para>
- Die OpenID Identität ist nur eine <acronym>URL</acronym> die auf eine Webseite mit
- entsprechenden Informationen über den Benutzer und spezielle Tags verweist welche
- beschreiben welcher Server verwendet werden soll und welche Identität dort zu
- übermitteln ist. Mehr über OpenID kann auf der
- <ulink url="http://www.openid.net/">offiziellen OpenID Site</ulink> nachgelesen werden.
- </para>
- <para>
- Die <classname>Zend_Auth_Adapter_OpenId</classname> Klasse umgibt die
- <classname>Zend_OpenId_Consumer</classname> Komponente welche das OpenID
- Authentifizierungs Protokoll selbst implementiert.
- </para>
- <note>
- <para>
- <classname>Zend_OpenId</classname> hat Vorteile davon wenn die
- <ulink url="http://php.net/gmp">GMP Erweiterung</ulink> vorhanden ist. Es sollte
- Angedacht werden die <acronym>GMP</acronym> Erweiterung für eine bessere
- Performance einzuschalten wenn <classname>Zend_Auth_Adapter_OpenId</classname>
- verwendet wird.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.auth.adapter.openid.specifics">
- <title>Spezielles</title>
- <para>
- Wie in diesem Fall für alle <classname>Zend_Auth</classname> Adapter, implementiert die
- <classname>Zend_Auth_Adapter_OpenId</classname> Klasse das
- <classname>Zend_Auth_Adapter_Interface</classname>, welches nur eine Methode definiert:
- <methodname>authenticate()</methodname>. Diese Methode führt die Authentifizierung
- selbst durch, allerdings muß das Objekt vor dem Aufruf vorbereitet werden. So eine
- Vorbereitung des Adapters beinhaltet das Setzen der OpenID Identität und einige andere
- <classname>Zend_OpenId</classname> spezifische Optionen.
- </para>
- <para>
- Trotzdem, im Gegensatz zu anderen <classname>Zend_Auth</classname> Adaptern führt
- <classname>Zend_Auth_Adapter_OpenId</classname> Authentifizierungen an einem externen
- Server durch und das wird in zwei separaten <acronym>HTTP</acronym> Anfragen getan.
- Deswegen muß <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> zweimal
- aufgerufen werden. Beim ersten Aufruf wird die Methode nichts zurückgeben, aber den
- Benutzer zu seinem OpenID Server umleiten. Dann, nachdem der Benutzer auf dem
- entfernten Server authentifiziert ist wird dieser wieder zurück umleiten und das Skript
- muß für diese zweite Anfrage
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> nochmals aufrufen um
- die Signatur zu prüfen, welche mit der umgeleiteten Anfrage vom Server geschickt wird,
- und den Authentifikationsprozess zu beenden. Bei diesem zweiten Aufruf wird wie
- erwartet ein <classname>Zend_Auth_Result</classname> Objekt zurückgegeben.
- </para>
- <para>
- Das folgende Beispiel zeigt die Verwendung von
- <classname>Zend_Auth_Adapter_OpenId</classname>. Wie vorher erwähnt wird die
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> Methode zweimal
- aufgerufen. Das erste Mal, ist nachdem der Benutzer das <acronym>HTML</acronym>
- Formular übermittelt hat und <varname>$_POST['openid_action']</varname> auf
- <emphasis>"login"</emphasis> gesetzt wurde, und das zweite Mal nach der
- <acronym>HTTP</acronym> Umleitung vom OpenID Server wenn
- <varname>$_GET['openid_mode']</varname> oder
- <varname>$_POST['openid_mode']</varname> gesetzt wurde.
- </para>
- <programlisting language="php"><![CDATA[
- $status = "";
- $auth = Zend_Auth::getInstance();
- if ((isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "login" &&
- !empty($_POST['openid_identifier'])) ||
- isset($_GET['openid_mode']) ||
- isset($_POST['openid_mode'])) {
- $result = $auth->authenticate(
- new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
- if ($result->isValid()) {
- $status = "Sie sind angemeldet als "
- . $auth->getIdentity()
- . "<br>\n";
- } else {
- $auth->clearIdentity();
- foreach ($result->getMessages() as $message) {
- $status .= "$message<br>\n";
- }
- }
- } else if ($auth->hasIdentity()) {
- if (isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "logout") {
- $auth->clearIdentity();
- } else {
- $status = "Sie sind angemeldet als "
- . $auth->getIdentity()
- . "<br>\n";
- }
- }
- ?>
- <html><body>
- <?php echo htmlspecialchars($status);?>
- <form method="post"><fieldset>
- <legend>OpenID Login</legend>
- <input type="text" name="openid_identifier" value="">
- <input type="submit" name="openid_action" value="login">
- <input type="submit" name="openid_action" value="logout">
- </fieldset></form></body></html>
- */
- ]]></programlisting>
- <para>
- Man kann den OpenID Authentifizierungs Prozess auf verschiedenen Wegen anzupassen. Man
- kann,zum Bespiel, die Umleitung des OpenID Servers auf eine eigene Seite erhalten, indem
- der "root" der Webseite spezifiziert wird und ein eigener
- <classname>Zend_OpenId_Consumer_Storage</classname> oder
- <classname>Zend_Controller_Response</classname> verwendet wird. Man kann auch eine
- einfache Registrierungserweiterung verwenden um Informationen über den Benutzer vom
- OpenID Server zu erhalten. Alle diese Möglichkeiten werden detailierter im Kapitel
- <classname>Zend_OpenId_Consumer</classname> beschrieben.
- </para>
- </sect2>
- </sect1>
|