picture example facebook facebook-graph-api-v2.0 spring-social-facebook

facebook - example - graph api explorer



Facebook Graph API rechaza token de acceso reciƩn creado (7)

Hoy temprano, el flujo de inicio de sesión de Facebook de nuestra aplicación web dejó de funcionar para algunos usuarios. Cuando intentamos buscar el perfil actual, se devuelve un error. Afirma que el token de acceso que acabamos de generar al redirigir al usuario al flujo de inicio de sesión de OAuth ha sido rechazado.

La razón dada es:

El token de acceso no es válido porque el usuario no ha activado la aplicación en más de 90 días

Para mí, esto no tiene sentido, ya que no almacenamos el token de acceso en ningún lugar excepto en la sesión actual y lo recreamos cada vez que el usuario inicia sesión con Facebook.

El stacktrace de Spring Social para la llamada GET /me parece a esto:

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn''t engaged the app in longer than 90 days. at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85) at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350) at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220) at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)

El problema probablemente esté relacionado con los cambios en la API de Facebook , pero no veo cómo afecta esto a los tokens de acceso de corta duración que creamos en cada inicio de sesión.


Agregar código de permiso en su aplicación

Gustos

Android: fbLoginButton.setReadPermissions (Arrays.asList (EMAIL));

IOS: loginButton.readPermissions = @ [@ "public_profile", @ "email"];


El error persiste según la developers.facebook.com/bugs/194772814474841

De acuerdo con el comentario de un usuario sobre la discusión mencionada, revocamos los permisos de cada usuario de nuestra aplicación y funcionó. Para esto utilizamos el siguiente endpoint api gráfico. Teníamos que persistir en los ID de facebook de los usuarios.

Saludos


Encontré este enlace en documentos de FB: actualización de tokens de acceso de usuario

Lo que menciona que después de 90 días, los usuarios deben restablecer su token, por lo que, en caso de que ocurra tal error, simplemente debemos redirigir al usuario para que se registre nuevamente.

Incluso mencionan que eliminan tokens de usuarios no activos en la parte superior de este documento. Tal vez cometieron un error y eliminaron todos los tokens de los usuarios. De todos modos, la solución es redirigir a los usuarios para que vuelvan a suscribirse.


Me encontré con este problema cuando nuestras pruebas de integración iniciaron sesión con un usuario de prueba: el siguiente JSON regresó de Graph API:

{ "error": { "message": "The access token is invalid since the user hasn''t engaged the app in longer than 90 days.", "type": "OAuthException", "code": 190, "error_subcode": 493, "fbtrace_id": "F/1z2AsTRx8" }, "timestamp_microsecond": "2018-05-30 11:22:01.353949" }

Ese fue un problema mayor ya que nuestros usuarios de prueba no se "involucran" con la aplicación como tal. Para arreglar esto tuve que:

  • Inicie sesión en el sitio de desarrolladores de FB
  • Encuentra la aplicación en cuestión
  • Busque en Funciones -> Probar usuarios para encontrar al usuario adecuado
  • Haga clic en el botón Editar para el usuario y luego haga clic en "Iniciar sesión como este usuario de prueba"
  • Una vez que haya iniciado sesión, vaya a Configuración -> Aplicaciones y sitios web
  • Encuentre la aplicación en la pestaña "Caducada" para las aplicaciones con las que el usuario no ha interactuado durante más de 90 días
  • Haga clic en el botón "Ver y editar" en la aplicación caducada
  • Haga clic en "Renovar acceso" en la ventana emergente

Una vez que había hecho todos esos pasos, mi usuario de prueba (y las pruebas de integración) volvieron a funcionar.


respuestas de facebook:

Gracias por ponerse en contacto. Este es un problema conocido que ya estamos rastreando en otro informe de errores.

Voy a combinar su informe con el existente, para que podamos abordar el problema en un solo lugar. Consulte este hilo para obtener actualizaciones: http://developers.facebook.com/bugs/194772814474841/

Mi solución temporal fue usar JS SDK, está funcionando correctamente en mi caso ...


Actualización :

El problema parece haber sido resuelto por Facebook.

Presenté developers.facebook.com/bugs/194772814474841 en Facebook y actualmente (5/3/18) está trabajando en una resolución.

Hay varias soluciones sugeridas aquí y en los comentarios de errores. Para resumir:

  1. Agregue un nuevo permiso que anteriormente no solicitó para forzar la reautorización
  2. Capte el error y vuelva a autorizar al usuario manualmente a través de auth_type=reauthorize
  3. Cambie a JS SDK y use el inicio de sesión del lado del cliente

Voy por la solución n. ° 2, ya que parece ser la manera más directa.


SOLUCIÓN TEMPORAL Para iOS, necesita cambiar el código SDK para admitir "volver a autorizar". Para cambiar el código fuente, deberá descargarlo usando CocoaPods. Luego copie las siguientes funciones en los pods: github.com/mavris/FacebookFix