Autenticación con Open ID
Introducción
El adaptador Zend_Auth_Adapter_OpenId 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.
El OpenID solo es un URI 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 sitio oficial de OpenId.
La clase Zend_Auth_Adapter_OpenIdencapsula
al componente Zend_OpenId_Consumer, el cual
implementa el protocolo de autentificación OpenID.
Zend_OpenId aprovecha las GMP extension, cuando estén
disponibles. Considere la posibilidad de usar GMP
extension para un mejor rendimiento cuando use
Zend_Auth_Adapter_OpenId.
Características
Como es el caso de todos los adaptadores
Zend_Auth, la clase
Zend_Auth_Adapter_OpenId implementa
Zend_Auth_Adapter_Interface, el cual
define un metodo authenticate(). 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
Zend_OpenId específicos.
Sin embargo, a diferencia de otros adaptadores de
Zend_Auth,
Zend_Auth_Adapter_OpenId realiza la
autenticación en un servidor externo en dos peticiones
HTTP separadas. Así que el método
Zend_Auth_Adapter_OpenId::authenticate()
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
Zend_Auth_Adapter_OpenId::authenticate()
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 Zend_Auth_Result como se esperaba.
El siguiente ejemplo muestra el uso de
Zend_Auth_Adapter_OpenId. Como se
mencionó anteriormente,
Zend_Auth_Adapter_OpenId::autenticar()
debe ser llamada dos veces. La primera vez es cuando el usuario
envía el formulario HTML con el
$_POST['openid_action'] en "Login"
, y la segunda es posterior a la redirección
HTTP del servidor OpenID con
$_GET['openid_mode'] o
$_POST['openid_mode'] .
authenticate(
new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
if ($result->isValid()) {
$status = "You are logged in as "
. $auth->getIdentity()
. "
\n";
} else {
$auth->clearIdentity();
foreach ($result->getMessages() as $message) {
$status .= "$message
\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()
. "
\n";
}
}
?>
]]>
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 Zend_OpenId_Consumer_Storage o un
Zend_Controller_Response. 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
Zend_OpenId_Consume.