2012-05-09 14 views
22

Con el antiguo google openid, cuando envié un usuario (que previamente había optado por mi aplicación) a la URL de autenticación, lo haría redirigirlos de inmediato a mi aplicación.¿Por qué Google OAuth2 vuelve a pedir permiso al usuario cuando los envío a la URL de autorización nuevamente

Ahora, con OAuth2, la url de autenticación sigue pidiendo permiso al usuario. He leído algunos de los documentos sobre este tema, pero lo que no me llevo es cómo este flujo i supone que funciona:

  1. usuario inicia sesión en Google a través de mi aplicación y hace clic permitir la permisos
  2. Días después, se borran las cookies , el usuario vuelve a mi sitio, hace click en "Login to google" no se le pide
  3. usuario permiso de nuevo y se registran inmediatamente en.

creo que tiene algo que ver con el almacenamiento de la autenticación de fichas o Actualizar token en el paso 1, pero en el Paso 3, no sé a quién son, entonces, ¿cómo puedo combinarlos con el token auth o refresh apropiado para obtener un token de acceso válido?

En mis pruebas, cuando las envío a la URL de autenticación original en el paso 1, se les piden permisos nuevamente.

EDIT: encontrado la solución

La google-api pone "approval_prompt = fuerza" por defecto al crear la url auth.

Respuesta

23

Sí, como lo ha notado al utilizar el parámetro approval_prompt = force, obligará 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á si utiliza el flujo del lado del servidor (response_type = code) y el acceso sin conexión (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 autenticació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.

+3

configuré esto como 'automático' como dicen los documentos de Google. Pero, lamentablemente, siempre vuelve a preguntar por los permisos. – dyoser

+1

Hola dyoser, estoy teniendo el mismo problema. ¿Tuviste la oportunidad de arreglar esto? – javadev

+0

Debe completar el proceso intercambiando el código del token, luego la aplicación aparecerá en la lista aquí https://security.google.com/settings/security/permissions y no se les volverán a pedir permisos a los usuarios. – zavr

0

Acaba de pasar un parámetro adicional en la solicitud 'approval_prompt=auto' trabajado para mí.

Cuestiones relacionadas