| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15960 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.auth.adapter.openid">
- <title>Autenticación con Open ID </title>
- <sect2 id="zend.auth.adapter.openid.introduction">
- <title>Introducción</title>
- <para>El adaptador <classname>Zend_Auth_Adapter_OpenId</classname> se
- puede usar para autentificar usuarios usando un servidor remoto de
- OpenID. Este método de autenticación supone que el usuario sólo
- envia su OpenID a la aplicacion web, luego se redirecciona (envia) a
- su proveedor de OpenID para su verificacion mediante su contraseña o
- algún otro metodo. Esta contraseña no se le proporciona a la
- aplicacion web.</para>
- <para>El OpenID solo es un <acronym>URI</acronym> que apunta a un sitio
- con información del usuari, así como información especiales que
- describe que servidor usar y que información (identidad) se debe
- enviar. Puedes leer más información acerca de OpenID en el <ulink
- url="http://www.openid.net/">sitio oficial de OpenId</ulink>.</para>
- <para>La clase <classname>Zend_Auth_Adapter_OpenId</classname>encapsula
- al componente <classname>Zend_OpenId_Consumer</classname>, el cual
- implementa el protocolo de autentificación OpenID.</para>
- <note>
- <para>
- <classname>Zend_OpenId</classname> aprovecha las <ulink
- url="http://php.net/gmp">GMP extension</ulink>, cuando estén
- disponibles. Considere la posibilidad de usar <acronym>GMP</acronym>
- extension para un mejor rendimiento cuando use
- <classname>Zend_Auth_Adapter_OpenId</classname>.</para>
- </note>
- </sect2>
- <sect2 id="zend.auth.adapter.openid.specifics">
- <title>Características</title>
- <para>Como es el caso de todos los adaptadores
- <classname>Zend_Auth</classname>, la clase
- <classname>Zend_Auth_Adapter_OpenId</classname> implementa
- <classname>Zend_Auth_Adapter_Interface</classname>, el cual
- define un metodo <methodname>authenticate()</methodname>. Este
- método realiza la autenticación en sí, pero el objeto debe estar
- configurado antes de ser llamado. La configuracion del adaptador
- requiere la creacion de un OpenID y otras opciones de
- <classname>Zend_OpenId</classname> específicos.</para>
- <para>Sin embargo, a diferencia de otros adaptadores de
- <classname>Zend_Auth</classname>,
- <classname>Zend_Auth_Adapter_OpenId</classname> realiza la
- autenticación en un servidor externo en dos peticiones
- <acronym>HTTP</acronym> separadas. Así que el método
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
- debe ser llamado dos veces. En la primera invocación del método no
- regresará nada, sino que redirige al usuario a su servidor de
- OpenID. Luego, después de que el usuario se autentica en el servidor
- remoto, este te regresará desde donde lo invocaste (a tu código) y
- deberás invocar a
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
- de nuevo para verificar la firma que acompaña a la petición de
- re-direccionamiento del servidor para completar el proceso de
- autenticación . En esta segunda invocación, el método devolverá el
- objeto <classname>Zend_Auth_Result</classname> como se esperaba.</para>
- <para>El siguiente ejemplo muestra el uso de
- <classname>Zend_Auth_Adapter_OpenId</classname>. Como se
- mencionó anteriormente,
- <methodname>Zend_Auth_Adapter_OpenId::autenticar()</methodname>
- debe ser llamada dos veces. La primera vez es cuando el usuario
- envía el formulario <acronym>HTML</acronym> con el
- <varname>$_POST['openid_action']</varname> en <emphasis>"Login"
- </emphasis>, y la segunda es posterior a la redirección
- <acronym>HTTP</acronym> del servidor OpenID con
- <varname>$_GET['openid_mode']</varname> o
- <varname>$_POST['openid_mode'] </varname>.</para>
- <programlisting language="php"><![CDATA[
- <?php
- $status = "";
- $auth = Zend_Auth::getInstance();
- if ((isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "login" &&
- !empty($_POST['openid_identifier'])) ||
- isset($_GET['openid_mode']) ||
- isset($_POST['openid_mode'])) {
- $result = $auth->authenticate(
- new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
- if ($result->isValid()) {
- $status = "You are logged in as "
- . $auth->getIdentity()
- . "<br>\n";
- } else {
- $auth->clearIdentity();
- foreach ($result->getMessages() as $message) {
- $status .= "$message<br>\n";
- }
- }
- } else if ($auth->hasIdentity()) {
- if (isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "logout") {
- $auth->clearIdentity();
- } else {
- $status = "You are logged in as "
- . $auth->getIdentity()
- . "<br>\n";
- }
- }
- ?>
- <html><body>
- <?php echo htmlspecialchars($status);?>
- <form method="post"><fieldset>
- <legend>OpenID Login</legend>
- <input type="text" name="openid_identifier" value="">
- <input type="submit" name="openid_action" value="login">
- <input type="submit" name="openid_action" value="logout">
- </fieldset></form></body></html>
- ]]></programlisting>
- <para>Puede personalizar el proceso de autenticación OpenID de varias
- formas. Por ejemplo, recibir la redirección del servidor de OpenID
- en una página aparte, especificando la "raíz" del sitio web y
- utilizar un <classname>Zend_OpenId_Consumer_Storage</classname> o un
- <classname>Zend_Controller_Response</classname>. Usted también
- puede utilizar el simple registro de extensiones para recuperar
- información sobre el usuario desde el servidor de OpenID. Todas
- estas posibilidades se describen con más detalle en el capítulo
- <classname>Zend_OpenId_Consume</classname>.</para>
- </sect2>
- </sect1>
|