Cómo migrar de ClientLogin a OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

Las APIs de YouTube usan OAuth 2.0 para autorizar las solicitudes de los usuarios. A menudo, nos preguntan si agregaremos compatibilidad con la autenticación ClientLogin o algo similar en las APIs de YouTube en el futuro. Sin embargo, dejamos de admitir oficialmente ClientLogin a partir del 20 de abril de 2012, y no hay planes para agregar ese mecanismo.

Existen varios motivos por los que creemos que admitir varios flujos de autorización de OAuth 2.0 es mejor para los usuarios de YouTube que ClientLogin. Estos flujos admiten casos de uso para aplicaciones de escritorio, aplicaciones solo web, aplicaciones nativas para dispositivos móviles y hasta aplicaciones que se ejecutan en dispositivos como televisores que no tienen mecanismos de entrada sofisticados, algo que es difícil de hacer con ClientLogin. Además, descubrimos que ClientLogin causa más problemas después del lanzamiento para muchos desarrolladores, algunos de los cuales describimos en nuestra entrada de blog ClientLogin #FAIL.

Uso de OAuth 2.0 para secuencias de comandos del servidor independientes

Muchos desarrolladores usan ClientLogin para autorizar secuencias de comandos de línea de comandos que se ejecutan en servidores sin un navegador. Con OAuth 2.0, casi siempre habrá un navegador involucrado, a excepción de cuando trabajas en una aplicación para Android que usa Google Play Services para recuperar tokens a través de GoogleAuthUtil..

En un flujo solo web, un sitio web que desee realizar llamadas a la API autenticadas en nombre de un usuario debe redireccionarlo a una página de autenticación de google.com que explique a qué intenta acceder la aplicación. A continuación, la aplicación web recibe un token, que utiliza para hacer invocaciones de API. Luego, el usuario puede revocar el acceso de la aplicación en cualquier momento desde la página connected apps and sites.

En nuestras muestras de código de Python, se muestra cómo las secuencias de comandos de línea de comandos pueden iniciar un navegador y realizar llamadas a la API desde una ventana de terminal, crear un servidor local para escuchar el código después del redireccionamiento de autorización y guardar automáticamente un token para futuras llamadas a la API. El video a continuación muestra esta secuencia en acción:

El token se usa en una cadena ASCII. Si es un token offline, es portátil. Puedes usar el token recuperado para ejecutar la secuencia de comandos en un equipo de escritorio y luego copiar y usar el código en un servidor remoto sin una GUI, siempre que dicho código cree una instancia de cliente OAuth 2.0 con el mismo ID y secreto de cliente. Además de Python, las bibliotecas cliente de la API de Google para otros lenguajes de programación también proporcionan métodos auxiliares para administrar tokens, que se pueden compartir entre clientes y hasta usar en bibliotecas HTTP de nivel inferior directamente en un encabezado de cliente o como un parámetro de URL.

Algunos ejemplos de secuencias de comandos del servidor que utilizan tokens sin conexión:

  • Un demonio que controla un directorio para detectar videos nuevos para subirlos automáticamente a YouTube
  • Una tarea cron que actualiza diariamente las listas de reproducción con contenido nuevo
  • Una secuencia de comandos que supervisa los datos de video a través de la API de YouTube Analytics y notifica a los administradores del canal cuando se producen ciertos eventos, como cuando el tiempo de reproducción agregado excede un límite. Ten presente que, en este caso, OAuth 2.0 es el único método de autorización admitido debido a que la API de Analytics no es compatible con ClientLogin.

En la sección sobre los tokens de acceso de larga duración se ofrecen más detalles acerca de cómo generar tokens sin conexión para su uso en procesos de servidor.

Recomendaciones sobre el ID del cliente y el secreto de cliente

Los códigos cuya combinación de ID de cliente y secreto de cliente sean la misma pueden usar los mismos tokens de acceso. Se recomienda permitir el acceso a los ID de cliente y secretos de cliente solo a los códigos que se ejecutan en equipos y dispositivos de tu organización.

No incluyas tu ID y secreto de cliente como parte de tu código nativo de aplicaciones móviles. Todos los programadores que realizan una autenticación OAuth 2.0 desde un dispositivo móvil deben utilizar el ID de cliente de "Aplicación instalada", que solicita información adicional para verificar que la solicitud viene exclusivamente de una aplicación publicada por tu equipo.

En los dispositivos Android, en lugar de usar un ID y secreto de cliente, la aplicación se identifica mediante una combinación del nombre del paquete y un hash del certificado de firma. En los dispositivos iOS, se utiliza el ID de paquete y el ID de la tienda de aplicaciones. La documentación oficial para recuperar esta información se encuentra en la página de ayuda de Google API Console.

Las cuentas de servicio no funcionan con la API de YouTube

Las cuentas de servicio no funcionan para las llamadas a la API de YouTube Data porque requieren un canal de YouTube asociado, y no puedes asociar canales nuevos o existentes con cuentas de servicio. Si usas una cuenta de servicio para llamar a la API de YouTube Data, el servidor de la API muestra un error con el tipo de error establecido en unauthorized y el motivo en youtubeSignupRequired.

Acceso sin conexión/de larga duración a la API de YouTube

OAuth 2.0 tiene tokens de corta duración y de larga duración. Para las operaciones puntuales, los tokens de acceso de corta duración son la mejor opción. Estos tokens expiran poco después de que se otorgan. Para trabajos de larga duración, te recomendamos que adquieras un token de actualización, que se usa para recuperar tokens de acceso de corta duración.

Para asegurarte de que tu aplicación reciba un token de actualización de larga duración y no un token de acceso de corta duración, usa el flujo "App instalada" cuando crees un ID de cliente y selecciona Other para el valor "Tipo de app instalada":

Para este tipo de uso se recomienda utilizar el flujo "Aplicación instalada". Si necesitas acceso de larga duración a la API de YouTube en una aplicación web, puedes recuperar uno configurando el parámetro access_type en offline y el parámetro approval_prompt en force en la solicitud de autorización inicial o en la configuración de tu cliente. Algunas bibliotecas de cliente administran la recuperación y la actualización de los tokens de acceso. Si te interesa escribir tu propio código de autorización personalizado, publicamos una entrada de blog en el blog de Google Code que puedes usar como base para tu código.

Uso de OAuth 2.0 con teléfonos, tablets y otros dispositivos

Cuando escriben aplicaciones para Android, los desarrolladores pueden aprovechar Google Play services para controlar los detalles de la autorización. Los Servicios de Google Play ofrecen un flujo de autorización estándar para todas las APIs de Google, incluidas las APIs de la plataforma de YouTube. Este enfoque proporcionará una experiencia del usuario mucho mejor a los usuarios de tu aplicación para Android que una autenticación personalizada con ClientLogin.

En los dispositivos iOS, Google ofrece dos opciones:

Recomendamos utilizar OAuth 2.0 para dispositivos con los dispositivos diseñados para funcionar como "segunda pantalla" u otros cuyos mecanismos de entrada no son fáciles de usar, como los televisores. El funcionamiento de OAuth 2.0 para dispositivos consiste en la presentación de un código único a un usuario cuando se requiere una solicitud de autorización. En este punto, se les solicita a los usuarios que naveguen a http://google.com/device en otro dispositivo, como una laptop o un teléfono, y que ingresen el código único. La aplicación muestra una pantalla similar a esta imagen:

Mientras el usuario ingresa el código en otro dispositivo, la aplicación realiza sondeos periódicos para verificar si se ingresó el código. Una vez que se ingresa, la aplicación recupera un token para realizar invocaciones de la API. Para ver esta secuencia en acción, revisa esta demostración ejecutable en cualquier dispositivo habilitado para navegar por la web. La API por si misma funciona en cualquier plataforma, lo que la hace útil para dispositivos que no tienen capacidades de procesamiento web. Publicamos código de muestra en Python para que la demostración se use como referencia.

Resumen

La autorización OAuth 2.0 proporciona flexibilidad para los programadores que requieren laautorización de YouTube. Es posible que los desarrolladores familiarizados con ClientLogin consideren que configurar sus aplicaciones para usar OAuth 2.0 requiere un poco más de trabajo para comenzar, pero una vez que se porten, las aplicaciones de OAuth 2.0 ofrecen más flexibilidad, seguridad y usabilidad en varias plataformas para los usuarios finales.

Si tienes más preguntas sobre OAuth 2.0 o alguno de los ejemplos de este artículo, no dudes en hacerlas con la etiqueta youtube-api en StackOverflow.