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.