Zend_Auth_Adapter_OpenId.xml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 OpenId</ulink>.</para>
  20. <para>La clase <classname>Zend_Auth_Adapter_OpenId</classname>encapsula
  21. al componente <classname>Zend_OpenId_Consumer</classname>, el cual
  22. implementa el protocolo de autentificación OpenID.</para>
  23. <note>
  24. <para>
  25. <classname>Zend_OpenId</classname> aprovecha las <ulink
  26. url="http://php.net/gmp">GMP extension</ulink>, cuando estén
  27. disponibles. Considere la posibilidad de usar <acronym>GMP</acronym>
  28. extension para un mejor rendimiento cuando use
  29. <classname>Zend_Auth_Adapter_OpenId</classname>.</para>
  30. </note>
  31. </sect2>
  32. <sect2 id="zend.auth.adapter.openid.specifics">
  33. <title>Características</title>
  34. <para>Como es el caso de todos los adaptadores
  35. <classname>Zend_Auth</classname>, la clase
  36. <classname>Zend_Auth_Adapter_OpenId</classname> implementa
  37. <classname>Zend_Auth_Adapter_Interface</classname>, el cual
  38. define un metodo <methodname>authenticate()</methodname>. Este
  39. método realiza la autenticación en sí, pero el objeto debe estar
  40. configurado antes de ser llamado. La configuracion del adaptador
  41. requiere la creacion de un OpenID y otras opciones de
  42. <classname>Zend_OpenId</classname> específicos.</para>
  43. <para>Sin embargo, a diferencia de otros adaptadores de
  44. <classname>Zend_Auth</classname>,
  45. <classname>Zend_Auth_Adapter_OpenId</classname> realiza la
  46. autenticación en un servidor externo en dos peticiones
  47. <acronym>HTTP</acronym> separadas. Así que el método
  48. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  49. debe ser llamado dos veces. En la primera invocación del método no
  50. regresará nada, sino que redirige al usuario a su servidor de
  51. OpenID. Luego, después de que el usuario se autentica en el servidor
  52. remoto, este te regresará desde donde lo invocaste (a tu código) y
  53. deberás invocar a
  54. <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
  55. de nuevo para verificar la firma que acompaña a la petición de
  56. re-direccionamiento del servidor para completar el proceso de
  57. autenticación . En esta segunda invocación, el método devolverá el
  58. objeto <classname>Zend_Auth_Result</classname> como se esperaba.</para>
  59. <para>El siguiente ejemplo muestra el uso de
  60. <classname>Zend_Auth_Adapter_OpenId</classname>. Como se
  61. mencionó anteriormente,
  62. <methodname>Zend_Auth_Adapter_OpenId::autenticar()</methodname>
  63. debe ser llamada dos veces. La primera vez es cuando el usuario
  64. envía el formulario <acronym>HTML</acronym> con el
  65. <varname>$_POST['openid_action']</varname> en <emphasis>"Login"
  66. </emphasis>, y la segunda es posterior a la redirección
  67. <acronym>HTTP</acronym> del servidor OpenID con
  68. <varname>$_GET['openid_mode']</varname> o
  69. <varname>$_POST['openid_mode'] </varname>.</para>
  70. <programlisting language="php"><![CDATA[
  71. <?php
  72. $status = "";
  73. $auth = Zend_Auth::getInstance();
  74. if ((isset($_POST['openid_action']) &&
  75. $_POST['openid_action'] == "login" &&
  76. !empty($_POST['openid_identifier'])) ||
  77. isset($_GET['openid_mode']) ||
  78. isset($_POST['openid_mode'])) {
  79. $result = $auth->authenticate(
  80. new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
  81. if ($result->isValid()) {
  82. $status = "You are logged in as "
  83. . $auth->getIdentity()
  84. . "<br>\n";
  85. } else {
  86. $auth->clearIdentity();
  87. foreach ($result->getMessages() as $message) {
  88. $status .= "$message<br>\n";
  89. }
  90. }
  91. } else if ($auth->hasIdentity()) {
  92. if (isset($_POST['openid_action']) &&
  93. $_POST['openid_action'] == "logout") {
  94. $auth->clearIdentity();
  95. } else {
  96. $status = "You are logged in as "
  97. . $auth->getIdentity()
  98. . "<br>\n";
  99. }
  100. }
  101. ?>
  102. <html><body>
  103. <?php echo htmlspecialchars($status);?>
  104. <form method="post"><fieldset>
  105. <legend>OpenID Login</legend>
  106. <input type="text" name="openid_identifier" value="">
  107. <input type="submit" name="openid_action" value="login">
  108. <input type="submit" name="openid_action" value="logout">
  109. </fieldset></form></body></html>
  110. ]]></programlisting>
  111. <para>Puede personalizar el proceso de autenticación OpenID de varias
  112. formas. Por ejemplo, recibir la redirección del servidor de OpenID
  113. en una página aparte, especificando la "raíz" del sitio web y
  114. utilizar un <classname>Zend_OpenId_Consumer_Storage</classname> o un
  115. <classname>Zend_Controller_Response</classname>. Usted también
  116. puede utilizar el simple registro de extensiones para recuperar
  117. información sobre el usuario desde el servidor de OpenID. Todas
  118. estas posibilidades se describen con más detalle en el capítulo
  119. <classname>Zend_OpenId_Consume</classname>.</para>
  120. </sect2>
  121. </sect1>