Cambiar de ClientLogin a OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

Las API de YouTube utilizan OAuth 2.0 para autorizar las solicitudes de los usuarios. Con frecuencia se nos pregunta si a futuro agregaremos compatibilidad para la autenticación ClientLogin o algo similar en las API de YouTube. Sin embargo, dejó de estar disponible oficialmente ClientLogin desde el 20 de abril de 2012,y no hay planes para agregar este tipo de mecanismo.

Existen numerosos motivos por los que creemos que es mejor admitir diversos flujos de autorización de OAuth 2.0 para los usuarios de YouTube que ClientLogin. Estos flujos admiten casos de uso para aplicaciones de escritorio, aplicaciones solo para la Web, aplicaciones nativas para dispositivos móviles e incluso 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 dolores de cabeza 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 en líneas de comandos que se ejecutan en servidores sin un navegador. Con OAuth 2.0, casi siempre habrá un navegador involucrado; la excepción es el cuando se trabaja en una aplicación de Android que usa Google Play Services para recuperar tokens a través de GoogleAuthUtil..

En un flujo solo web, un sitio web que desee hacer invocaciones de API autenticadas en nombre de un usuario debe redirigir al usuario a una página de autenticación de google.com que explica a qué está tratando de acceder la aplicación. A continuación, la aplicación web recibe un token, que utiliza para hacer invocaciones de API. El usuario puede revocar el acceso de la aplicación en cualquier momento con la página connected apps and sites.

Nuestras muestras de código Python demuestran la forma en que las secuencias de comandos de líneas de comandos pueden iniciar un navegador y realizar llamadas a la API desde una ventana de terminal, crear un servidor local para recibir el código después de que se redirige la autorización y guardar automáticamente un token para futuras llamadas de 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 e incluso usarse 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
  • 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. Puedes encontrar la documentación oficial para recuperar esta información 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 datos de YouTube porque las cuentas de servicio requieren un canal de YouTube asociado, y no puedes asociar canales nuevos o existentes con las cuentas de servicio. Si usas una cuenta de servicio para invocar la API de datos de YouTube, 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. En el caso de las tareas de ejecución prolongada, tal vez desees adquirir un token de actualización, que se utiliza 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, utiliza el flujo "Aplicación instalada" cuando crees un ID de cliente y selecciona Other para el valor "Tipo de aplicación 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 recuperarlo estableciendo 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 deseas escribir tu propio código de autorización personalizado, esta entrada en el blog de Google Code puede servirte como base para tu código.

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

Al escribir aplicaciones para Android, los desarrolladores pueden aprovechar Google Play services para controlar los detalles de autorización. Servicios de Google Play ofrece un flujo de autorización estándar para todas las API de Google, que incluye las API para la plataforma de YouTube. Este enfoque les brindará una experiencia de usuario muy superior a la de tu aplicación para Android que la autenticación personalizada que usa 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 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 ejemplo de código 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. Los desarrolladores familiarizados con ClientLogin pueden notar que la configuración de sus aplicaciones para usar OAuth 2.0 requiere un poco más de trabajo para comenzar, pero una vez que están conectadas, las aplicaciones 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 hacerla usando la etiqueta youtube-api en Stack Overflow.