| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?xml version="1.0" encoding="UTF-8"?>
- <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 extension</acronym> 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, <classname>Zend_Auth_Adapter_OpenId::autenticar()</classname>
- 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>
|