oauth 2.0 - secret - ¿Por qué Google OAuth2 vuelve a pedir permiso al usuario cuando los envío a la URL de autenticación nuevamente?
refresh token google api (3)
Con el antiguo google openid, cuando envié un usuario (que previamente había optado por mi aplicación) a la URL de autenticación, inmediatamente los redireccionaba a mi aplicación.
Ahora, con OAuth2, la URL de autenticación sigue pidiendo permiso al usuario. Leí algunos de los documentos sobre esto, pero lo que no entiendo es cómo se supone que funcione este flujo:
- El usuario inicia sesión en google a través de mi aplicación y hace clic en PERMITIR permisos
- Días después, se borran las cookies, el usuario vuelve a mi sitio y hace clic en "Iniciar sesión en google".
- El usuario no vuelve a solicitar permiso e inmediatamente se registra.
Creo que tiene algo que ver con el almacenamiento del token de autenticación o el token de actualización en el paso 1, pero en el paso 3, no sé quiénes son, así que ¿cómo puedo combinarlos con el token de actualización o autenticación adecuado para obtener un válido token de acceso
En mis pruebas, cuando las envío a la URL de autenticación original en el paso 1, se les piden permisos nuevamente.
EDIT: encontré la solución
Google-api pone "approval_prompt = force" de forma predeterminada al crear la URL de autenticación.
Sí, como ha notado al utilizar el parámetro approval_prompt = force URL, se forzará a mostrar el diálogo de autenticación al usuario cada vez. Simplemente eliminando este parámetro de URL, no se le preguntará al usuario sobre los flujos de autenticación posteriores.
Hay una ligera diferencia en la respuesta que obtendrás si usas el flujo del lado del servidor (response_type = code) y el acceso fuera de línea (access_type = offline). La primera vez que el usuario lo autoriza (cuando ve la pantalla de aprobación) o si lo fuerza mediante el uso de approval_prompt = force, cuando intercambia el código de autenticación se le otorgará una refresh_token y una access_token.
Sin embargo, cada vez que el usuario no se muestra con la pantalla de aprobación (auth subsiguiente cuando no usa approval_prompt = force), al cambiar el código de autenticación solo se le otorgará access_token, no refresh_token. Entonces, si ese es el flujo que está utilizando y si desea poder acceder a los datos del usuario fuera de línea, debe asegurarse de guardar el refresh_token localmente para usarlo en el futuro, cuando lo obtenga por primera vez. Es probable que esto solo suceda si solicita acceso a otro tipo de datos además de los datos de autorización (mediante el flujo OAuth 2 puede solicitar acceso a otros datos, por ejemplo, datos de la API de contactos, datos de la API de calendario, datos de Drive, etc ... ) ya que normalmente un flujo de ID de Open normal no necesitaría acceso sin conexión.
Solo me pasó un parámetro adicional en la solicitud ''approval_prompt=auto''
.
Para mí fue el parámetro hd
(dominio alojado). Después de eliminar la URL de autorización, me dieron una lista de usuarios para elegir Auth. Más información sobre el parámetro hd
aquí https://developers.google.com/identity/protocols/OpenIDConnect#hd-param