¿Vencen los tokens de acceso de Facebook Oauth 2.0?


124

Estoy jugando con la autorización Oauth 2.0 en Facebook y me preguntaba si los tokens de acceso de Facebook caducan. Si es así, ¿hay alguna manera de solicitar un token de acceso de larga duración?


44
Para agregar algunos detalles a esta pregunta: incluso el acceso fuera de línea se invalida cuando el usuario cambia su contraseña de Facebook. Por lo tanto, es mejor jugar de forma segura y volver a obtener un nuevo token de acceso si recibe errores al usar el antiguo.
Hoàng Long


2
chicos, todos ustedes simplemente rockean. Cualquiera que sea la pregunta, solo lo resuelvo ... Gracias a todos
vinay

3
Parece que Facebook está desaprobando el permiso offline_access el 1 de mayo. En el futuro, todos los tokens de acceso caducarán cuando se acabe el "tiempo de caducidad" (60 días), el usuario cambie su contraseña, el usuario desautorice su aplicación o cierre la sesión. API . PD: No estoy seguro de por qué Facebook está configurando el nuevo "tiempo de caducidad" en 60 días si los tokens de acceso aún caducarán al cerrar sesión (parece que los usuarios tienden a cerrar la sesión dentro de 60 días) Tal vez me estoy perdiendo algo ... caducidad
Steven Wexler

1
El comportamiento de access_token está cambiando ahora, debe buscar los "Cambios de última hora" de julio de 2012: el permiso offline_access está en desuso y el access_token tendrá un largo ciclo de vida.
qodeninja

Respuestas:


64

Después de investigar un poco, encontré esto. Parece ser la respuesta:

Actualizado (11 / abril / 2018)

  • El token caducará después de unos 60 días.
  • El token se actualizará una vez al día, durante un máximo de 90 días, cuando la persona que usa su aplicación realice una solicitud a los servidores de Facebook.
  • Todos los tokens de acceso deben renovarse cada 90 días con el consentimiento de la persona que usa su aplicación.

Anuncio de cambio de Facebook (10/04/2018)

Facebook actualizó la página de vencimiento del token (10/04/2018)

offline_access: permite que su aplicación realice solicitudes autorizadas en nombre del usuario en cualquier momento. De manera predeterminada, la mayoría de los tokens de acceso caducan después de un corto período de tiempo para garantizar que las aplicaciones solo realicen solicitudes en nombre del usuario cuando están utilizando activamente la aplicación. Este permiso hace que el token de acceso devuelto por nuestro punto final OAuth sea de larga duración.

Es un valor de permiso solicitado.

http://developers.facebook.com/docs/authentication/permissions

ACTUALIZAR

El permiso offline_access se eliminó hace un tiempo.

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/


2
En respuesta a esto, comencé una biblioteca de código abierto que puede ser de alguna utilidad para ustedes. Es una biblioteca de oAuth que tiene como objetivo admitir todas las redes sociales con implementaciones de oAuth. Ya admite permisos extendidos, incluida la publicación sin conexión. code.google.com/p/socialoauth
Tendrid

Incluso los tokens offline_access caducan si el usuario cambia su contraseña en Facebook.
Bemmu

Lamentablemente, no es una solución "limpia" para el problema en cuestión. Primero o todos los que soliciten este permiso alertan al usuario sobre el permiso adicional (por ejemplo, esta aplicación podrá acceder a su cuenta de Facebook en CUALQUIER momento), lo que desactiva a MUCHOS clientes potenciales. En segundo lugar, si el uso cambia su contraseña, este token no será válido. Por lo tanto, debe haber una mejor manera (p. Ej., Token de actualización) para obtener un nuevo access_token, especialmente para aplicaciones web basadas en ajax de cliente rico.
Vladimir

24
De acuerdo con su documentación de la API, offline_access ya no será compatible a partir del 2 de mayo de 2012.
Ben Lesh

@Tendrid Su biblioteca solo es compatible con Facebook y Twitter.
mareoraft

30

Prueba esto puede ser que te ayudará por completo

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

Para obtener el token de acceso de por vida, debe usar scope=offline_access

El significado de scope=offline_accesses que: -

Permite que su aplicación realice solicitudes autorizadas en nombre del usuario en cualquier momento. De manera predeterminada, la mayoría de los tokens de acceso caducan después de un corto período de tiempo para garantizar que las aplicaciones solo realicen solicitudes en nombre del usuario cuando están utilizando activamente la aplicación. Este permiso hace que el token de acceso devuelto por nuestro punto final OAuth sea de larga duración.

Pero según la actualización futura de Facebook, la funcionalidad offline_acees quedará obsoleta para siempre a partir del 3 de octubre de 2012. Al usuario se le otorgará un token de acceso de larga duración de 60 días y antes de que caduque el token de acceso, Facebook le notificará o puede obtener su costumbre. funcionalidad de notificación que recupera el valor de vencimiento de la API de Facebook.


10
Me gustaría informarle que fb ha cambiado en su api y ahora no hay token de por vida disponible, ahora el acceso sin conexión estará activo durante 60 días.
PrateekSaluja


17

Vine aquí con la misma pregunta que el OP, pero las respuestas que sugieren el uso de offline_access me están dando señales de alerta.

En cuanto a la seguridad, obtener acceso sin conexión a la cuenta de Facebook de un usuario es cualitativamente diferente y mucho más poderoso que solo usar Facebook para el inicio de sesión único, y no debe usarse a la ligera (a menos que realmente lo necesite). Cuando un usuario otorga este permiso, "la aplicación" puede examinar la cuenta del usuario desde cualquier lugar en cualquier momento. Puse "la aplicación" entre comillas porque en realidad es cualquier herramienta que tenga las credenciales: puede crear un conjunto de herramientas que no tengan nada que ver con el servidor web y que puedan acceder a cualquier información que el usuario haya acordado compartir. cartas credenciales.

No usaría esta función para evitar una vida útil breve del token; ese no es su propósito previsto. De hecho, el token de por vida es una característica de seguridad. Todavía estoy buscando detalles sobre el uso adecuado de estos tokens (¿Puedo persistirlos? ¿Cómo / debo asegurarlos? ¿Facebook incrusta el "token de actualización" OAuth 2.0 dentro del principal? Si no, ¿dónde está? / o ¿cómo actualizo?), pero estoy bastante seguro de que offline_access no es la forma correcta.


1
las mismas dudas aqui david. ¿Encontraste más información sobre cómo proteger los tokens almacenados para el acceso sin conexión?
neal aise

Los documentos de Facebook son terribles, pero creo que la situación es que es razonablemente seguro mantener los tokens de acceso NO adquiridos con offline_access. Si bien es cierto que cualquiera que tenga acceso a él (mientras el usuario de FB todavía está conectado) puede hacer cualquier cosa para la cual el usuario le haya otorgado permiso, no es tan malo ya que los tokens se invalidan tan pronto como el usuario cierra sesión en Facebook en cualquier sitio. Todavía es un agujero de seguridad (me parece extraño que no tenga que proporcionar el secreto de su aplicación en las solicitudes / me), pero no es abierto. Si alguien siente esto mejor, no dudes en corregirme.
David Pope

8

Sí, caducan. Hay un valor 'caduca' que se pasa junto con 'access_token', y por lo que puedo decir, son aproximadamente 2 horas. He estado buscando, pero no veo una manera de solicitar un tiempo de vencimiento más largo.


3
Si solicita el permiso 'offline_access', el token no caducará.
Brendan Berg el

1
@Brendan: Pero se invalidará tan pronto como el usuario cambie su contraseña de Facebook
Hoàng Long

@ HoàngLong alguna referencia a esto?
Charles Prakash Dasari


4

Siempre puede actualizar el token de acceso del usuario cada vez que el usuario inicia sesión en su sitio a través de Facebook. El acceso sin conexión no puede garantizarle que obtenga un token de acceso de por vida, el token de acceso cambia cada vez que el usuario revoca su acceso a la aplicación o el usuario cambia su contraseña.

Citado de facebook http://developers.facebook.com/docs/authentication/

Nota: Si la aplicación no ha solicitado permiso offline_access, el token de acceso tiene un límite de tiempo. El token de acceso con límite de tiempo también se invalida cuando el usuario cierra sesión en Facebook. Si la aplicación ha obtenido el permiso offline_access del usuario, el token de acceso no tiene vencimiento. Sin embargo, se invalida cuando el usuario cambia su contraseña.

Supongamos que almacena el usuario de Facebook del usuario y el token de acceso en una tabla de usuarios en su base de datos, cada vez que el usuario hace clic en el botón "Iniciar sesión con Facebook", verifica el estado de inicio de sesión con la API de Facebook Javascript y luego examina el estado de conexión de la respuesta , si el usuario se ha conectado a su sitio, puede actualizar el token de acceso en la tabla.


3

Presione esto para intercambiar un token de acceso de corta duración por uno de larga duración / no vencido (páginas):

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

1

inicie sesión en la cuenta de Facebook y edite la configuración de su aplicación (cuenta -> configuración de la aplicación -> permiso adicional de la aplicación que utiliza su cuenta). desmarque el permiso (Acceda a mis datos cuando no esté usando la aplicación (offline_access)). Luego, face reservará un nuevo token cuando inicie sesión en la aplicación.



0

Verifique las siguientes cosas cuando interactúa con la API gráfica de Facebook.

1) La URL de conexión de la aplicación debe ser la base de su URL de conexión "redirect_uri": - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Su "redirect_uri "debe ser el mismo en ambos casos (cuando solicita un código de verificación y un access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3) debe codificar el argumento cuando solicita un access_token 4) no debe pasar el argumento (type = client_cred) cuando solicita un access_token. el servidor de autorización emitirá un token sin parte de sesión. No podemos usar este token con el alias "yo" en la API gráfica. Este token tendrá una longitud de (40) pero un token con parte de sesión tendrá una longitud de (81). Un token de acceso sin parte de sesión funcionará con algunos casos

por ejemplo: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Pero Graph API con alias "yo" funcionará solo con token con parte de sesión.


0

No sé cuándo caducan exactamente los tokens, pero lo hacen, de lo contrario no habría una opción para otorgar permisos sin conexión.

De todos modos, a veces exigir al usuario que otorgue permisos fuera de línea es una exageración. Dependiendo de sus necesidades, tal vez sea suficiente que el token siga siendo válido siempre que el sitio web esté abierto en el navegador del usuario. Para esto puede haber una solución más simple: volver a registrar al usuario periódicamente usando un iframe: reingreso automático de Facebook desde cookie php

Trabajó para mi...


0

Esto es justo unos años más tarde, pero el Explorador de API de gráficos de Facebook ahora tiene un pequeño símbolo de información junto al token de acceso que le permite acceder a la aplicación de herramienta de token de acceso y extender el token API por un par de meses. Puede ser útil durante el desarrollo.

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.