
Septiembre de 2008
Introducción
Es un momento emocionante para los desarrolladores. Comenzamos a ver que se adoptan varios estándares abiertos en la Web y, como sabes, Google siempre ha sido un gran fan de los estándares y de fomentar la comunidad de código abierto.
Recientemente, todas las APIs de datos de Google adoptaron la compatibilidad con OAuth, un protocolo abierto que tiene como objetivo estandarizar la forma en que las aplicaciones web y de escritorio acceden a los datos privados de un usuario. OAuth proporciona un medio para realizar la autenticación de la API de forma estándar y segura. Como programadores, se nos enseña a reutilizar el código siempre que sea posible. OAuth ayudará a los desarrolladores a reducir la cantidad de código duplicado que escriben y facilitará la creación de herramientas que funcionen con varios servicios de una variedad de proveedores diferentes.
Público
En este artículo, se supone que conoces una o más de las APIs de datos de Google, pero no necesariamente los conceptos detrás de OAuth. Si estás comenzando o simplemente sientes curiosidad por OAuth, no busques más. En este artículo, se te proporcionará una base de los conceptos. También analizaré los detalles de la implementación de OAuth de Google.
Este documento también está dirigido a los desarrolladores que saben cómo usar AuthSub, en especial en el modo registrado con seguridad mejorada. A medida que avancemos, intentaré destacar las similitudes y las diferencias entre los dos protocolos. Si tienes aplicaciones que usan AuthSub, puedes usar esta información para migrar a OAuth, que es un protocolo más abierto y moderno.
Un poco de terminología
Comprender OAuth se trata de entender su terminología. La especificación de OAuth y la documentación de Autenticación de OAuth para aplicaciones web de Google se basan en gran medida en ciertas definiciones, por lo que aclararemos qué significa cada una en el contexto de la implementación de OAuth de Google.
- "OAuth dance"
Término no oficial que uso para describir el proceso completo de autenticación y autorización de OAuth.
- Token de solicitud (OAuth)
Es un token inicial que le permite a Google saber que tu aplicación solicita acceso a una de las APIs de Google Data. El segundo paso del proceso de OAuth es que el usuario otorgue acceso manualmente a sus datos. Si este paso se realiza correctamente, el token de solicitud se autoriza.
- Token de acceso (OAuth)
El último paso del intercambio es cambiar el token de solicitud autorizado por un token de acceso. Una vez que tu aplicación tenga este token, el usuario no necesitará volver a realizar el proceso de OAuth, a menos que se revoque el token.
Similitud con AuthSub:
Un token de acceso de OAuth es lo mismo que un token de sesión de AuthSub seguro. - Extremos (OAuth)
Son los URIs necesarios para autenticar una aplicación y obtener un token de acceso. Hay tres en total, una para cada paso del proceso de OAuth. Los extremos de OAuth de Google son los siguientes:
Obtén un token de solicitud: https://www.google.com/accounts/OAuthGetRequestToken
Autoriza el token de solicitud: https://www.google.com/accounts/OAuthAuthorizeToken
Actualiza a un token de acceso: https://www.google.com/accounts/OAuthGetAccessToken
Similitud con AuthSub:
El intercambio de un token de solicitud autorizado por un token de acceso es análogo a la actualización de un token de AuthSub de un solo uso a un token de sesión de larga duración enhttps://www.google.com/accounts/AuthSubRequestToken
yhttps://www.google.com/accounts/AuthSubSessionToken
, respectivamente. La diferencia es que AuthSub no tiene el concepto de un token de solicitud inicial. En su lugar, el usuario inicia el proceso del token desde la página de autorizaciónAuthSubRequestToken
. - Proveedor de servicios (OAuth)
En el caso de las APIs de datos de Google, este proveedor es Google. En general, el proveedor de servicios se usa para describir el sitio web o el servicio web que proporciona los extremos de OAuth. Otro ejemplo de proveedor de servicios de OAuth es MySpace.
- Consumidor (OAuth)
Es el programa que solicita permiso para acceder a los datos de un usuario (es decir, tu aplicación). El protocolo de OAuth es flexible, ya que permite una amplia variedad de tipos de clientes diferentes (web, instalados, de escritorio, móviles).
Nota: Si bien el protocolo de OAuth admite el caso de uso de aplicaciones instaladas o de escritorio, Google solo admite OAuth para aplicaciones web.
Comenzar
Registro
Antes de comenzar a usar OAuth con las APIs de datos de Google, debes realizar una pequeña configuración. Dado que todas las solicitudes de OAuth deben firmarse digitalmente, primero debes registrar tu dominio y subir un certificado público a Google. Consulta Registro para aplicaciones basadas en la Web y Cómo generar claves y certificados para usar con el modo registrado para obtener más información sobre cómo hacerlo.
Solicitudes de firmas
Una vez que se registre tu dominio, podrás comenzar a firmar solicitudes. Uno de los conceptos más difíciles de OAuth es cómo construir correctamente el oauth_signature
y la noción de la cadena base de la firma. La cadena base son los datos que firmas con tu clave privada (con RSA_SHA1
). El resultado es el valor que estableces para oauth_signature
.
Ejemplo de solicitud
GET
una lista de los Calendarios de Google de un usuario en http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
Formato de cadena base | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
Ejemplo de cadena base | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
Ejemplo de solicitud HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
Nota: Esto es solo una representación. Tu oauth_signature
será mucho más largo.
Notas sobre la cadena base:
- El parámetro de búsqueda
orderby=starttime
se ordena junto con el resto de los parámetrosoauth_*
en orden lexicográfico de valor de byte. - Esta cadena tampoco contiene el carácter "?".
- La parte
base-http-request-url
solo contiene la URL base codificada en formato de URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. - El parámetro
oauth_token
está codificado como URL doble.
Notas sobre el encabezado Authorization
:
- El orden de los parámetros
oauth_*
no importa en el encabezadoAuthorization
. - El encabezado no incluye
orderby=starttime
como lo hizo la cadena base. Ese parámetro de consulta se mantiene como parte de la URL de la solicitud.
Para obtener más información sobre cómo firmar solicitudes con OAuth, consulta Cómo firmar solicitudes de OAuth.
Diferencia con AuthSub:
A modo de comparación, aquí se muestra el mismo ejemplo con AuthSub seguro:
Formato de cadena base | base_string = http-method http-request-URL timestamp nonce |
---|---|
Ejemplo de cadena base |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
Ejemplo de solicitud HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
Para obtener más información sobre cómo firmar solicitudes con AuthSub, consulta Cómo firmar solicitudes de AuthSub.
Herramienta de OAuth Playground
Objetivo
Algunos usuarios sugirieron que OAuth tiene una curva de aprendizaje pronunciada. En comparación con otras APIs de autenticación de Google, estaría de acuerdo. La ventaja de OAuth será evidente cuando expandas tu app para usar otros servicios (que no sean de Google). Escribir un solo fragmento de código de autenticación que funcione en diferentes proveedores de servicios y sus APIs me parece una buena idea. Más adelante, te agradecerás por aprender el protocolo ahora.
El OAuth Playground es una herramienta que creé para ayudar a los desarrolladores a solucionar sus problemas relacionados con OAuth. Puedes usar Playground para depurar problemas, verificar tu propia implementación o experimentar con las APIs de Google Data.
¿Qué hace?
- Ilustra el flujo de autenticación de OAuth: cómo recuperar un token de solicitud, autorizar el token y actualizarlo a un token de acceso.
- Muestra la cadena base de firma correcta para cada solicitud.
- Muestra el encabezado
Authorization
correcto para cada solicitud. - Muestra cómo usar un objeto
oauth_token
para interactuar con un feed de datos de Google autenticado. PuedesGET
/POST
/PUT
/DELETE
datos. - Visualiza un feed autenticado directamente en tu navegador.
- Te permite probar tu propio
oauth_consumer_key
(tu dominio registrado) y tu clave privada. - Descubre qué servicios de feeds de datos de Google están disponibles para tu
oauth_token
.
Ejecución de demostración
Paso 1: Elige tus alcancesPrimero, elige uno o más permisos para decidir qué APIs quieres usar. En esta demostración, solicitaré un token que funcionará con Blogger y con Google Contacts. Similitud con AuthSub: |
![]() |
Paso 2: Modifica los parámetros y la configuración de OAuthPor el momento, no modifiques ningún parámetro de configuración en el cuadro "Modify the OAuth Parameters". Más adelante, puedes realizar pruebas con tu propia clave privada. Para ello, cambia Nota: Además de Diferencia con AuthSub: |
![]() |
Pasos 3 a 5: Obtén el token de accesoPara obtener un token de acceso de OAuth, debes seguir tres pasos. El primer paso es recuperar un token de solicitud. Esto le permite a Google saber que tu aplicación está iniciando el intercambio de OAuth. Primero, haz clic en el botón "Solicitar token" en el cuadro "Obtener el token". Algunos campos se propagarán con datos.
|
![]() ![]() |
A continuación, haz clic en el botón "Autorizar" en el cuadro "Obtener el token". En esta página de autorización, haz clic en el botón "Grant Access" para autorizar el token de solicitud y volver a OAuth Playground. Similitud con AuthSub: Diferencia con AuthSub: Nota: Se prefiere especificar una URL de |
![]() |
Por último, haz clic en el botón “Token de acceso” en el cuadro “Obtén el token”. Esta acción actualiza el token de solicitud autorizado (como se indica en la etiqueta roja "token de acceso"). Si deseas recuperar un token nuevo, haz clic en "Volver a empezar" para reiniciar el intercambio de OAuth. Ahora podemos hacer algo interesante. |
![]() |
Cómo usar el token de acceso
Ahora puedes consultar feeds, insertar, actualizar o borrar datos. Ten cuidado cuando realices estos tres últimos métodos HTTP, ya que trabajarás con tus datos reales.
Nota: Para descubrir los feeds disponibles para tu token de acceso, haz clic en el botón "Feeds disponibles".
Aquí tienes un ejemplo de consulta: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

En este ejemplo, se muestran no más de tres publicaciones en un blog en particular. También puedes ver el feed o la entrada devueltos directamente en tu navegador haciendo clic en el vínculo "Ver en el navegador" que se encuentra debajo del área destacada de la sintaxis.
Ejemplo: Cómo actualizar una publicación
- Ubica el elemento
<link>
con un rel="edit" en la publicación que deseas actualizar. Deberá verse de la siguiente manera:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
Pega la URL de href en la entrada "Ingresa un feed de datos de Google".
- Para copiar el XML de la entrada existente, haz clic en "Ver texto sin formato" en la parte superior del panel con sintaxis resaltada. Solo copia el cuerpo de la respuesta, no los encabezados.
- Cambia el menú desplegable del método HTTP a
PUT
. - Haz clic en "enter post data" debajo de ese menú desplegable y pega el XML de
<entry>
en la ventana emergente. - Haz clic en el botón "Ejecutar".
El servidor responderá con un 200 OK
.
Nota: En lugar de copiar manualmente el vínculo edit
, desmarca la casilla de verificación “¿Resaltado de sintaxis?”. Después de una consulta, podrás hacer clic en los vínculos dentro de los cuerpos de respuesta XML.
Conclusión
Las tecnologías como el protocolo de publicación Atom/AtomPub (protocolo subyacente de las APIs de Google Data) y OAuth ayudan a impulsar la Web. A medida que más y más sitios comiencen a adoptar estos estándares, los desarrolladores seremos los ganadores. Crear una app increíble de repente se vuelve menos intimidante.
Si tienes preguntas o comentarios sobre OAuth Playground, o sobre el uso de OAuth con las APIs de Google, visítanos en el Foro de asistencia de las APIs de G Suite y de Marketplace.