Estoy tratando de implementar el inicio de sesión de Google y el acceso a la API para una aplicación web con un back-end de Node.js. Los documentos de Google ofrecen dos opciones usando una combinación de platform.js del lado del cliente y google-auth-library del lado del servidor:
auth2.signIn() en el cliente y verifyIdToken() en el servidor).auth2.grantOfflineAccess() en el cliente, que devuelve un código que puedo pasar a getToken() en el servidor).Necesito ambos: quiero autenticar a los usuarios a través del inicio de sesión de Google; y quiero configurar la autenticación del servidor para que también pueda funcionar en nombre del usuario.
No puedo entender cómo hacer esto con un solo flujo de autenticación. Lo más cerca que puedo estar es hacer los dos en secuencia: autenticar al usuario primero con signIn() y luego (según sea necesario), hacer un segundo paso a través grantOfflineAccess() . Esto es problemático:
Idealmente, hay alguna variante de signIn() que agrega el acceso sin conexión al flujo de autenticación inicial y devuelve el código junto con los tokens habituales, pero no veo nada. ¿Ayuda?
(Editar: un consejo que recibí en otro lugar es implementar solo el flujo n. ° 2, luego usar una tienda de cookies segura, algún tipo de identificador de usuario que verifico con la cuenta de usuario con cada solicitud. Puedo ver que esto funcionaría funcionalmente, pero básicamente significa que estoy implementando mi propio sistema de inicio de sesión, lo que parece aumentar la posibilidad de que introduzca errores en un sistema crítico).
Durante la autenticación (iniciar sesión), debe agregar el tipo de acceso "fuera de línea" (de forma predeterminada en línea), por lo que obtendrá un token de actualización que puede usar para obtener el token de acceso más adelante sin más consentimiento/autenticación del usuario. No necesita otorgar sin conexión más tarde, sino solo durante el inicio de sesión agregando el tipo de acceso sin conexión. No sé sobre plataforma.js, pero usé el módulo npm "pasaporte". También he usado el módulo/biblioteca npm "googleapis", esto es oficial de Google.
https://developers.google.com/identity/protocols/oauth2/web-server
https://github.com/googleapis/google-api-nodejs-cliente
Verifique esto: https://github.com/googleapis/google-api-nodejs-client#generating-an-authentication-url
EDITAR: tiene un lado del servidor y necesita trabajar en nombre del usuario. También desea usar Google para iniciar sesión. Solo necesita el inicio de sesión de Google n. ° 2 para aplicaciones del lado del servidor, ¿por qué está considerando las opciones n. ° 1 y n. ° 2?
Puedo pensar en el n. ° 2 como la forma adecuada según sus requisitos. Si solo desea iniciar sesión, use un alcance básico como correo electrónico y perfil (openid connect) para identificar al usuario. Y si desea un permiso delegado del usuario (como si desea crear automáticamente un evento en el calendario de los usuarios), simplemente agregue el tipo de acceso sin conexión durante el inicio de sesión. Puede usar solo el inicio de sesión para usuarios registrados y el acceso sin conexión para nuevos usuarios.
Arriba hay un flujo de autenticación único.