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. Con frecuencia, se nos pregunta si agregaremos compatibilidad con la autenticación ClientLogin o algo similar en las APIs de YouTube en el futuro. Sin embargo, dimos de baja oficialmente ClientLogin el 20 de abril de 2012, y no hay planes para agregar un mecanismo de este tipo.

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 para la Web, aplicaciones 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 a muchos desarrolladores después del lanzamiento.

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 navegador. Con OAuth 2.0, casi siempre habrá un navegador involucrado, excepto cuando trabajes en una aplicación para Android que use Google Play Services para recuperar tokens a través de GoogleAuthUtil..

En un flujo solo para la Web, un sitio web que desea realizar llamadas a la API autenticadas en nombre de un usuario debe redireccionar al usuario 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.

Nuestras muestras de código de Python demuestran cómo las secuencias de comandos de la 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 de offline, es portátil. Con el token recuperado, podrás ejecutar la secuencia de comandos en tu computadora y, luego, copiar y usar el código en un servidor remoto sin GUI, siempre que el código cree una instancia de un cliente de OAuth 2.0 con el mismo ID y secreto del cliente. Además de Python, las bibliotecas cliente de las APIs de Google para otros lenguajes de programación también proporcionan métodos de ayuda para administrar tokens, que se pueden compartir entre clientes y hasta usar directamente en bibliotecas HTTP de nivel inferior 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
  • Un trabajo cron que actualiza las playlists a diario 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 tokens de acceso de larga duración, se proporcionan más detalles para generar los tokens sin conexión que se pueden usar en procesos del 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 de cliente ni tu secreto de cliente como parte del código de tus aplicaciones nativas para dispositivos 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 de cliente y un secreto del cliente, tu aplicación se identifica con 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. Puedes encontrar la documentación oficial sobre cómo recuperar esta información en la página de ayuda de Google Cloud 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 establecido 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 los trabajos de larga duración, es posible que desees obtener 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 de "Aplicación instalada" cuando crees un ID de cliente y selecciona Other para el valor de "Tipo de aplicación instalada":

Te recomendamos que uses el flujo de "Aplicación instalada" para este caso de uso. 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 del 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 para la plataforma de YouTube. Este enfoque proporcionará una experiencia del usuario muy superior para los usuarios de tu aplicación para Android que una autenticación personalizada con ClientLogin.

En los dispositivos iOS, Google ofrece dos opciones:

  • el Google+ Platform for iOS, que integra el acceso para los productos de Google y también habilita las funciones sociales
  • El gtm-oauth2 toolkit, que proporciona un UIWebView de autorización y administra tokens

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 pide 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 se use como referencia en la demostración.

Resumen

La autorización OAuth 2.0 proporciona flexibilidad para los programadores que requieren laautorización de YouTube. Los desarrolladores que conocen ClientLogin pueden descubrir que configurar sus aplicaciones para usar OAuth 2.0 requiere un poco más de trabajo para comenzar, pero, una vez que se portan, las aplicaciones de OAuth 2.0 ofrecen más flexibilidad, seguridad y usabilidad en múltiples plataformas para los usuarios finales.

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