Zend_Auth_Adapter_OpenId.xml 6.2 KB

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