Zend_Auth_Adapter_OpenId.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.auth.adapter.openid">
  5. <title>Open ID Authentifikation</title>
  6. <sect2 id="zend.auth.adapter.openid.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. Der <classname>Zend_Auth_Adapter_OpenId</classname> Adapter kann verwendet werden um
  10. Benutzer durch Verwendung eines entfernten OpenID Servers zu authentifizieren. Diese
  11. Authentifizierungsmethode nimmt an das Benutzer nur ihre OpenID Identität an die Web
  12. Anwendung übermitteln. Dann werden Sie zu Ihrem OpenID Anbieter umgeleitet um die
  13. Eigentümerschaft der Identität mit Hilfe eines Passwortes oder einer anderen Methode zu
  14. prüfen. Dieses Passwort wird der Web Anwendung nie bekannt gegeben.
  15. </para>
  16. <para>
  17. Die OpenID Identität ist nur eine <acronym>URL</acronym> die auf eine Webseite mit
  18. entsprechenden Informationen über den Benutzer und spezielle Tags verweist welche
  19. beschreiben welcher Server verwendet werden soll und welche Identität dort zu
  20. übermitteln ist. Mehr über OpenID kann auf der
  21. <ulink url="http://www.openid.net/">offiziellen OpenID Site</ulink> nachgelesen werden.
  22. </para>
  23. <para>
  24. Die <classname>Zend_Auth_Adapter_OpenId</classname> Klasse umgibt die
  25. <classname>Zend_OpenId_Consumer</classname> Komponente welche das OpenID
  26. Authentifizierungs Protokoll selbst implementiert.
  27. </para>
  28. <note>
  29. <para>
  30. <classname>Zend_OpenId</classname> hat Vorteile davon wenn die
  31. <ulink url="http://php.net/gmp">GMP Erweiterung</ulink> vorhanden ist. Es sollte
  32. Angedacht werden die <acronym>GMP</acronym> Erweiterung für eine bessere
  33. Performance einzuschalten wenn <classname>Zend_Auth_Adapter_OpenId</classname>
  34. verwendet wird.
  35. </para>
  36. </note>
  37. </sect2>
  38. <sect2 id="zend.auth.adapter.openid.specifics">
  39. <title>Spezielles</title>
  40. <para>
  41. Wie in diesem Fall für alle <classname>Zend_Auth</classname> Adapter, implementiert die
  42. <classname>Zend_Auth_Adapter_OpenId</classname> Klasse das
  43. <classname>Zend_Auth_Adapter_Interface</classname>, welches nur eine Methode definiert:
  44. <methodname>authenticate()</methodname>. Diese Methode führt die Authentifizierung
  45. selbst durch, allerdings muß das Objekt vor dem Aufruf vorbereitet werden. So eine
  46. Vorbereitung des Adapters beinhaltet das Setzen der OpenID Identität und einige andere
  47. <classname>Zend_OpenId</classname> spezifische Optionen.
  48. </para>
  49. <para>
  50. Trotzdem, im Gegensatz zu anderen <classname>Zend_Auth</classname> Adaptern führt
  51. <classname>Zend_Auth_Adapter_OpenId</classname> Authentifizierungen an einem externen
  52. Server durch und das wird in zwei separaten <acronym>HTTP</acronym> Anfragen getan.
  53. Deswegen muß <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> zweimal
  54. aufgerufen werden. Beim ersten Aufruf wird die Methode nichts zurückgeben, aber den
  55. Benutzer zu seinem OpenID Server umleiten. Dann, nachdem der Benutzer auf dem
  56. entfernten Server authentifiziert ist wird dieser wieder zurück umleiten und das Skript
  57. muß für diese zweite Anfrage
  58. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> nochmals aufrufen um
  59. die Signatur zu prüfen, welche mit der umgeleiteten Anfrage vom Server geschickt wird,
  60. und den Authentifikationsprozess zu beenden. Bei diesem zweiten Aufruf wird wie
  61. erwartet ein <classname>Zend_Auth_Result</classname> Objekt zurückgegeben.
  62. </para>
  63. <para>
  64. Das folgende Beispiel zeigt die Verwendung von
  65. <classname>Zend_Auth_Adapter_OpenId</classname>. Wie vorher erwähnt wird die
  66. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> Methode zweimal
  67. aufgerufen. Das erste Mal, ist nachdem der Benutzer das <acronym>HTML</acronym>
  68. Formular übermittelt hat und <varname>$_POST['openid_action']</varname> auf
  69. <emphasis>"login"</emphasis> gesetzt wurde, und das zweite Mal nach der
  70. <acronym>HTTP</acronym> Umleitung vom OpenID Server wenn
  71. <varname>$_GET['openid_mode']</varname> oder
  72. <varname>$_POST['openid_mode']</varname> gesetzt wurde.
  73. </para>
  74. <programlisting language="php"><![CDATA[
  75. $status = "";
  76. $auth = Zend_Auth::getInstance();
  77. if ((isset($_POST['openid_action']) &&
  78. $_POST['openid_action'] == "login" &&
  79. !empty($_POST['openid_identifier'])) ||
  80. isset($_GET['openid_mode']) ||
  81. isset($_POST['openid_mode'])) {
  82. $result = $auth->authenticate(
  83. new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
  84. if ($result->isValid()) {
  85. $status = "Sie sind angemeldet als "
  86. . $auth->getIdentity()
  87. . "<br>\n";
  88. } else {
  89. $auth->clearIdentity();
  90. foreach ($result->getMessages() as $message) {
  91. $status .= "$message<br>\n";
  92. }
  93. }
  94. } else if ($auth->hasIdentity()) {
  95. if (isset($_POST['openid_action']) &&
  96. $_POST['openid_action'] == "logout") {
  97. $auth->clearIdentity();
  98. } else {
  99. $status = "Sie sind angemeldet als "
  100. . $auth->getIdentity()
  101. . "<br>\n";
  102. }
  103. }
  104. ?>
  105. <html><body>
  106. <?php echo htmlspecialchars($status);?>
  107. <form method="post"><fieldset>
  108. <legend>OpenID Login</legend>
  109. <input type="text" name="openid_identifier" value="">
  110. <input type="submit" name="openid_action" value="login">
  111. <input type="submit" name="openid_action" value="logout">
  112. </fieldset></form></body></html>
  113. */
  114. ]]></programlisting>
  115. <para>
  116. Man kann den OpenID Authentifizierungs Prozess auf verschiedenen Wegen anzupassen. Man
  117. kann,zum Bespiel, die Umleitung des OpenID Servers auf eine eigene Seite erhalten, indem
  118. der "root" der Webseite spezifiziert wird und ein eigener
  119. <classname>Zend_OpenId_Consumer_Storage</classname> oder
  120. <classname>Zend_Controller_Response</classname> verwendet wird. Man kann auch eine
  121. einfache Registrierungserweiterung verwenden um Informationen über den Benutzer vom
  122. OpenID Server zu erhalten. Alle diese Möglichkeiten werden detailierter im Kapitel
  123. <classname>Zend_OpenId_Consumer</classname> beschrieben.
  124. </para>
  125. </sect2>
  126. </sect1>