Zend_Auth_Adapter_OpenId.xml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.auth.adapter.openid">
  5. <title>Autenticación con Open ID </title>
  6. <sect2 id="zend.auth.adapter.openid.introduction">
  7. <title>Introducción</title>
  8. <para>
  9. El adaptador
  10. <classname>Zend_Auth_Adapter_OpenId</classname>
  11. se
  12. puede usar para autentificar usuarios usando un servidor remoto de
  13. OpenID. Este método
  14. de autenticación supone que el usuario sólo
  15. envia su OpenID a la aplicacion web, luego se
  16. redirecciona (envia) a
  17. su proveedor de OpenID para su verificacion mediante su contraseña
  18. o
  19. algún otro metodo. Esta contraseña no se le proporciona a la
  20. aplicacion web.
  21. </para>
  22. <para>
  23. El OpenID solo es un
  24. <acronym>URI</acronym>
  25. que apunta a un sitio
  26. con información del usuari, así como información especiales que
  27. describe que servidor usar y que información (identidad) se debe
  28. enviar. Puedes leer más
  29. información acerca de OpenID en el
  30. <ulink url="http://www.openid.net/">sitio oficial de
  31. OpenId</ulink>
  32. .
  33. </para>
  34. <para>
  35. La clase
  36. <classname>Zend_Auth_Adapter_OpenId</classname>
  37. encapsula
  38. al componente
  39. <classname>Zend_OpenId_Consumer</classname>
  40. , el cual
  41. implementa el protocolo de autentificación OpenID.
  42. </para>
  43. <note>
  44. <para>
  45. <classname>Zend_OpenId</classname>
  46. aprovecha las
  47. <ulink url="http://php.net/gmp">GMP extension</ulink>
  48. , cuando estén
  49. disponibles. Considere la posibilidad de usar
  50. <acronym>GMP</acronym>
  51. extension para un mejor rendimiento
  52. cuando use
  53. <classname>Zend_Auth_Adapter_OpenId</classname>
  54. .
  55. </para>
  56. </note>
  57. </sect2>
  58. <sect2 id="zend.auth.adapter.openid.specifics">
  59. <title>Características</title>
  60. <para>
  61. Como es el caso de todos los adaptadores
  62. <classname>Zend_Auth</classname>
  63. , la clase
  64. <classname>Zend_Auth_Adapter_OpenId</classname>
  65. implementa
  66. <classname>Zend_Auth_Adapter_Interface</classname>
  67. , el cual
  68. define un metodo
  69. <methodname>authenticate()</methodname>
  70. . Este
  71. método realiza la autenticación en sí, pero el objeto debe estar
  72. configurado antes
  73. de ser llamado. La configuracion del adaptador
  74. requiere la creacion de un OpenID y otras
  75. opciones de
  76. <classname>Zend_OpenId</classname>
  77. específicos.
  78. </para>
  79. <para>
  80. Sin embargo, a diferencia de otros adaptadores de
  81. <classname>Zend_Auth</classname>
  82. ,
  83. <classname>Zend_Auth_Adapter_OpenId</classname>
  84. realiza la
  85. autenticación en un servidor externo en dos peticiones
  86. <acronym>HTTP</acronym>
  87. separadas. Así que el método
  88. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  89. debe ser llamado dos veces. En la primera invocación del método no
  90. regresará nada, sino
  91. que redirige al usuario a su servidor de
  92. OpenID. Luego, después de que el usuario se
  93. autentica en el servidor
  94. remoto, este te regresará desde donde lo invocaste (a tu código)
  95. y
  96. deberás invocar a
  97. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  98. de nuevo para verificar la firma que acompaña a la petición de
  99. re-direccionamiento del
  100. servidor para completar el proceso de
  101. autenticación . En esta segunda invocación, el
  102. método devolverá el
  103. objeto
  104. <classname>Zend_Auth_Result</classname>
  105. como se
  106. esperaba.
  107. </para>
  108. <para>
  109. El siguiente ejemplo muestra el uso de
  110. <classname>Zend_Auth_Adapter_OpenId</classname>
  111. . Como se
  112. mencionó anteriormente,
  113. <methodname>Zend_Auth_Adapter_OpenId::autenticar()</methodname>
  114. debe ser llamada dos veces. La primera vez es cuando el usuario
  115. envía el formulario
  116. <acronym>HTML</acronym>
  117. con el
  118. <varname>$_POST['openid_action']</varname>
  119. en
  120. <emphasis>"Login"
  121. </emphasis>
  122. , y la segunda es posterior a la redirección
  123. <acronym>HTTP</acronym>
  124. del servidor OpenID con
  125. <varname>$_GET['openid_mode']</varname>
  126. o
  127. <varname>$_POST['openid_mode'] </varname>
  128. .
  129. </para>
  130. <programlisting language="php"><![CDATA[
  131. <?php
  132. $status = "";
  133. $auth = Zend_Auth::getInstance();
  134. if ((isset($_POST['openid_action']) &&
  135. $_POST['openid_action'] == "login" &&
  136. !empty($_POST['openid_identifier'])) ||
  137. isset($_GET['openid_mode']) ||
  138. isset($_POST['openid_mode'])) {
  139. $result = $auth->authenticate(
  140. new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
  141. if ($result->isValid()) {
  142. $status = "You are logged in as "
  143. . $auth->getIdentity()
  144. . "<br>\n";
  145. } else {
  146. $auth->clearIdentity();
  147. foreach ($result->getMessages() as $message) {
  148. $status .= "$message<br>\n";
  149. }
  150. }
  151. } else if ($auth->hasIdentity()) {
  152. if (isset($_POST['openid_action']) &&
  153. $_POST['openid_action'] == "logout") {
  154. $auth->clearIdentity();
  155. } else {
  156. $status = "You are logged in as "
  157. . $auth->getIdentity()
  158. . "<br>\n";
  159. }
  160. }
  161. ?>
  162. <html><body>
  163. <?php echo htmlspecialchars($status);?>
  164. <form method="post"><fieldset>
  165. <legend>OpenID Login</legend>
  166. <input type="text" name="openid_identifier" value="">
  167. <input type="submit" name="openid_action" value="login">
  168. <input type="submit" name="openid_action" value="logout">
  169. </fieldset></form></body></html>
  170. ]]></programlisting>
  171. <para>
  172. Puede personalizar el proceso de autenticación OpenID de varias
  173. formas. Por ejemplo,
  174. recibir la redirección del servidor de OpenID
  175. en una página aparte, especificando la
  176. "raíz" del sitio web y
  177. utilizar un
  178. <classname>Zend_OpenId_Consumer_Storage</classname>
  179. o un
  180. <classname>Zend_Controller_Response</classname>
  181. . Usted también
  182. puede utilizar el simple registro de extensiones para recuperar
  183. información sobre el usuario desde el servidor de OpenID. Todas
  184. estas posibilidades se
  185. describen con más detalle en el capítulo
  186. <classname>Zend_OpenId_Consume</classname>
  187. .
  188. </para>
  189. </sect2>
  190. </sect1>