| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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>
|