Zend_Auth_Adapter_OpenId.xml 6.3 KB

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