El mecanismo AuthSub le permite escribir aplicaciones web que obtienen acceso autenticado a los servicios de Google Data, sin tener que escribir código que gestione las credenciales del usuario.
Consulte http://code.google.com/apis/accounts/AuthForWebApps.html para más información sobre la autenticación AuthSub de Google Data.
La documentación de Google indica que el mecanismo ClientLogin es apropiado para "aplicaciones instaladas", mientras que el mecanismo AuthSub es para "aplicaciones web". La diferencia es que AuthSub requiere interacción del usuario y una interfaz de navegador que pueda reaccionar a las solicitudes de redirección. La solución ClientLogin usa código PHP para proporcionar las credenciales de la cuenta; no se requiere que el usuario introduzca sus credenciales de forma interactiva.
Las credenciales de la cuenta proporcionadas mediante el mecanismo AuthSub son introducidas por el usuario de la aplicación web. Por lo tanto, deben ser credenciales de cuenta conocidas por ese usuario.
![]() |
Aplicaciones registradas |
|---|---|
|
Su aplicación PHP debe proporcionar un hiperenlace a la
URL de Google que realiza la autenticación. La función estática
Zend_Gdata_AuthSub::getAuthSubTokenUri()
proporciona la URL correcta. Los argumentos de esta función incluyen
la URL de su aplicación PHP para que Google pueda
redirigir el navegador del usuario de vuelta a su aplicación después de que las
credenciales del usuario hayan sido verificadas.
Después de que el servidor de autenticación de Google redirige el navegador del usuario
de vuelta a la aplicación actual, se establece un parámetro de solicitud GET,
llamado token. El valor de este parámetro es un token de un solo uso
que puede usarse para acceso autenticado. Este token puede convertirse en un token
multiuso y almacenarse en su sesión.
Luego use el valor del token en una llamada a
Zend_Gdata_AuthSub::getHttpClient().
Esta función devuelve una instancia de Zend_Http_Client,
con las cabeceras apropiadas establecidas para que las solicitudes posteriores que su
aplicación envíe usando ese Cliente HTTP también estén autenticadas.
A continuación se muestra un ejemplo de código PHP para que una aplicación web
obtenga autenticación para usar el servicio Google Calendar
y cree un objeto cliente Zend_Gdata usando ese Cliente
HTTP autenticado.
$my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
if (!isset($_SESSION['cal_token'])) {
if (isset($_GET['token'])) {
// You can convert the single-use token to a session token.
$session_token =
Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
// Store the session token in our session.
$_SESSION['cal_token'] = $session_token;
} else {
// Display link to generate single-use token
$googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
$my_calendar, 0, 1);
echo "Click <a href='$googleUri'>here</a> " .
"to authorize this application.";
exit();
}
}
// Create an authenticated HTTP Client to talk to Google.
$client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
// Create a Gdata object using the authenticated Http Client
$cal = new Zend_Gdata_Calendar($client);
Para terminar el estado autenticado de un token dado, use la
función estática
Zend_Gdata_AuthSub::AuthSubRevokeToken().
De lo contrario, el token seguirá siendo válido durante
algún tiempo.
// Carefully construct this value to avoid application security problems.
$php_self = htmlentities(substr($_SERVER['PHP_SELF'],
0,
strcspn($_SERVER['PHP_SELF'], "\n\r")),
ENT_QUOTES);
if (isset($_GET['logout'])) {
Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
unset($_SESSION['cal_token']);
header('Location: ' . $php_self);
exit();
}
![]() |
Notas de seguridad |
|---|---|
|
El tratamiento de la variable En cuanto a la revocación de tokens de autenticación, se recomienda hacerlo cuando el usuario haya terminado su sesión de Google Data. La posibilidad de que alguien pueda interceptar el token y usarlo para fines maliciosos es muy pequeña, pero de todas formas es una buena práctica terminar el acceso autenticado a cualquier servicio. |
![[Note]](images/note.png)