Zend_Auth_Adapter_OpenId.xml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15960 -->
  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>El adaptador <classname>Zend_Auth_Adapter_OpenId</classname> se
  9. puede usar para autentificar usuarios usando un servidor remoto de
  10. OpenID. Este método de autenticación supone que el usuario sólo
  11. envia su OpenID a la aplicacion web, luego se redirecciona (envia) a
  12. su proveedor de OpenID para su verificacion mediante su contraseña o
  13. algún otro metodo. Esta contraseña no se le proporciona a la
  14. aplicacion web.</para>
  15. <para>El OpenID solo es un <acronym>URI</acronym> que apunta a un sitio
  16. con información del usuari, así como información especiales que
  17. describe que servidor usar y que información (identidad) se debe
  18. enviar. Puedes leer más información acerca de OpenID en el <ulink
  19. url="http://www.openid.net/">sitio oficial de
  20. OpenId</ulink>.</para>
  21. <para>La clase <classname>Zend_Auth_Adapter_OpenId</classname>encapsula
  22. al componente <classname>Zend_OpenId_Consumer</classname>, el cual
  23. implementa el protocolo de autentificación OpenID.</para>
  24. <note>
  25. <para>
  26. <classname>Zend_OpenId</classname> aprovecha las <ulink
  27. url="http://php.net/gmp">GMP extension</ulink>, cuando estén
  28. disponibles. Considere la posibilidad de usar
  29. <acronym>GMP</acronym> extension para un mejor rendimiento
  30. cuando use
  31. <classname>Zend_Auth_Adapter_OpenId</classname>.</para>
  32. </note>
  33. </sect2>
  34. <sect2 id="zend.auth.adapter.openid.specifics">
  35. <title>Características</title>
  36. <para>Como es el caso de todos los adaptadores
  37. <classname>Zend_Auth</classname>, la clase
  38. <classname>Zend_Auth_Adapter_OpenId</classname> implementa
  39. <classname>Zend_Auth_Adapter_Interface</classname>, el cual
  40. define un metodo <methodname>authenticate()</methodname>. Este
  41. método realiza la autenticación en sí, pero el objeto debe estar
  42. configurado antes de ser llamado. La configuracion del adaptador
  43. requiere la creacion de un OpenID y otras opciones de
  44. <classname>Zend_OpenId</classname> específicos.</para>
  45. <para>Sin embargo, a diferencia de otros adaptadores de
  46. <classname>Zend_Auth</classname>,
  47. <classname>Zend_Auth_Adapter_OpenId</classname> realiza la
  48. autenticación en un servidor externo en dos peticiones
  49. <acronym>HTTP</acronym> separadas. Así que el método
  50. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  51. debe ser llamado dos veces. En la primera invocación del método no
  52. regresará nada, sino que redirige al usuario a su servidor de
  53. OpenID. Luego, después de que el usuario se autentica en el servidor
  54. remoto, este te regresará desde donde lo invocaste (a tu código) y
  55. deberás invocar a
  56. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  57. de nuevo para verificar la firma que acompaña a la petición de
  58. re-direccionamiento del servidor para completar el proceso de
  59. autenticación . En esta segunda invocación, el método devolverá el
  60. objeto <classname>Zend_Auth_Result</classname> como se
  61. esperaba.</para>
  62. <para>El siguiente ejemplo muestra el uso de
  63. <classname>Zend_Auth_Adapter_OpenId</classname>. Como se
  64. mencionó anteriormente,
  65. <methodname>Zend_Auth_Adapter_OpenId::autenticar()</methodname>
  66. debe ser llamada dos veces. La primera vez es cuando el usuario
  67. envía el formulario <acronym>HTML</acronym> con el
  68. <varname>$_POST['openid_action']</varname> en <emphasis>"Login"
  69. </emphasis>, y la segunda es posterior a la redirección
  70. <acronym>HTTP</acronym> del servidor OpenID con
  71. <varname>$_GET['openid_mode']</varname> o
  72. <varname>$_POST['openid_mode'] </varname>.</para>
  73. <programlisting language="php"><![CDATA[
  74. <?php
  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 = "You are logged in as "
  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 = "You are logged in as "
  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. ]]></programlisting>
  114. <para>Puede personalizar el proceso de autenticación OpenID de varias
  115. formas. Por ejemplo, recibir la redirección del servidor de OpenID
  116. en una página aparte, especificando la "raíz" del sitio web y
  117. utilizar un <classname>Zend_OpenId_Consumer_Storage</classname> o un
  118. <classname>Zend_Controller_Response</classname>. Usted también
  119. puede utilizar el simple registro de extensiones para recuperar
  120. información sobre el usuario desde el servidor de OpenID. Todas
  121. estas posibilidades se describen con más detalle en el capítulo
  122. <classname>Zend_OpenId_Consume</classname>.</para>
  123. </sect2>
  124. </sect1>