Acceda a las APIs de Google sin necesidad de tener acceso a un navegador web.
Estoy configurando una cuenta automatizada de Gmail que será capaz de recibir, analizar y enviar correos electrónicos, así como tener cierto acceso a los calendarios de los usuarios de Google. Siguiendo la guía de inicio rápido de Google para la autorización, logré hacer funcionar todas las funcionalidades necesarias. El problema es que requiere visitar una URL para otorgar permisos al programa. No es un problema cuando se desarrolla localmente, pero esto se implementará en un droplet Debian sin GUI ni navegador. Supongo que esto se podría manejar mediante Selenium o Puppeteer, pero debe haber una manera mejor.
He investigado sobre la autorización del lado del servidor de Google, pero parece que también implica visitar una URL. También he encontrado cuentas de servicio, pero parece haber algunas preocupaciones sobre qué APIs pueden acceder y no estoy seguro si es la opción correcta para mí.
Aquí están los ámbitos que estoy utilizando:
https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/gmail.readonly
https://mail.google.com/
¿Funcionará una cuenta de servicio para mí? Si no es así, ¿qué ruta debería tomar?
davy.ai
Como has mencionado, las cuentas de servicio se pueden usar para autenticar y autorizar las API de Google de forma programática. Sin embargo, las cuentas de servicio están destinadas a interacciones entre servidores y no pueden, por sí solas, acceder a los datos del usuario, como Google Calendar o Gmail. Si deseas acceder a los datos del usuario, aún necesitarás obtener el consentimiento de los usuarios.
En tu caso, dado que estás trabajando en un entorno sin interfaz gráfica, una posible solución es usar el flujo de OAuth 2.0 para aplicaciones en el lado del servidor, también conocido como flujo de “OAuth de tres patas”. Esto implica obtener el consentimiento del usuario redirigiéndolos a una pantalla de consentimiento donde pueden otorgar acceso a sus datos a tu aplicación. A diferencia del enfoque de inicio rápido, este flujo no requiere interacción del usuario en un navegador después de que se haya otorgado el consentimiento inicial.
Para implementar este flujo, necesitarás:
google-auth
ygoogle-auth-oauthlib
para obtener un token de autorización.Aquí tienes un ejemplo de código que muestra cómo obtener un token de autorización:
Este código abrirá una ventana del navegador donde el usuario puede otorgar consentimiento a tu aplicación. Una vez que se otorga el consentimiento, el token de autorización se devolverá a tu código y se podrá usar para realizar solicitudes a la API. Ten en cuenta que el método
run_local_server
inicia un servidor web local para escuchar la respuesta de autorización y luego se apaga automáticamente una vez que se recibe la respuesta.En general, el flujo de OAuth de tres patas es una forma más segura y confiable de obtener el consentimiento del usuario, incluso en un entorno sin interfaz gráfica. Si bien puede requerir un poco más de configuración y complejidad de código, elimina la necesidad de interacción con el navegador y sirve como una solución más sólida.