Token de acceso de FB de larga duración para que el servidor extraiga información de la página de FB

114

Soy consciente de que hay muchas preguntas sobre los tokens de acceso de Facebook y el dolor que causan, pero a pesar de mucha experimentación y leer muchos artículos de blog frustrantemente vagos (FB y otros), todavía estoy luchando por obtener una respuesta clara a mis necesidades. . Permítanme desglosar sucintamente mi proceso hasta ahora:

  • Estoy creando un sitio que, del lado del servidor, necesita extraer las publicaciones / estados de una sola página de Facebook
  • Soy administrador de esa página de Facebook
  • He creado una aplicación de Facebook
  • Usando el Explorador de API de Facebook Graph , he generado una clave de corta duración, conectada a mi aplicación y mi cuenta, que otorga permiso a mi cuenta para ver los tokens de acceso para mis páginas.
  • He convertido mi clave de corta duración en una clave de larga duración (60 días) en el escenario 4 de este

Y aquí es donde estoy atrapado. Mi clave de 60 días funciona bien para que mi servidor extraiga la información necesaria de la página, pero hasta donde puedo decir, no hay forma de extender programáticamente esa clave de 60 días. Tampoco conozco una forma de generar una nueva clave de corta duración sin ir manualmente al Explorador de API de gráficos de Facebook y crear una.

Dado que es mi servidor el que realiza las solicitudes a la API de Facebook y no un sistema basado en el usuario (donde podría solicitar fácilmente que un usuario autorice la aplicación de Facebook nuevamente), esto crea un sistema muy torpe. Dado que Facebook está en desuso offline_access, ¿no hay realmente una forma permanente de que mi servidor extraiga información de mi propia página? ¿Realmente tendré que crear una nueva clave a mano y actualizar manualmente mi servidor con ella cada 60 días?

¿O hay algo que me estoy perdiendo?

Actualizar:

La guía paso a paso que se encontró anteriormente aquí se ha migrado a su propia respuesta .

venganza roja
fuente
Esto es asombroso. Estoy en la misma situación y estaba buscando información sobre este tema. ¿Es seguro que este token no infringe ninguna política de la plataforma FB? Solo preguntaba para estar seguro.
onigunn
2
La propia documentación de @asrijaal Facebook (eche un vistazo al Escenario 5) dice que estos tokens de acceso a la página no caducan. Yo diría que es seguro asumir que cumplen con las políticas de Facebook.
redhotvengeance
"Pensé que sería bueno dejar un proceso claro paso a paso" - Dios no lo quiera :) Gracias @redhotvengeance
Steve McGill
Tiene un error tipográfico con la URL del token de acceso a su página. ¿Debería ser un? no cuentas a & after. Pasé un tiempo tratando de averiguar por qué esto no funcionaba. : P
Joren
@Joren De hecho, ahora está arreglado. ¡Gracias!
redhotvengeance

Respuestas:

188

Estos son los pasos que estaban anteriormente en la pregunta; se han migrado a esta respuesta.

Habiendo descubierto que es posible generar un token de acceso a la página de Facebook que no caduca (con la ayuda de @Igy), aquí hay una guía clara paso a paso para todos aquellos que buscan lo mismo:

  1. Asegúrese de ser el administrador de la página de FB de la que desea extraer información
  2. Cree una aplicación FB (debe tener la misma cuenta de usuario que es el administrador de la página)
  3. Dirígete al Explorador de API Graph de Facebook
  4. En la parte superior derecha, seleccione la aplicación FB que creó en la lista desplegable "Aplicación"
  5. Haga clic en "Obtener token de acceso"
  6. Asegúrate de agregar el manage_pagespermiso
  7. Convierta este token de acceso de corta duración en uno de larga duración haciendo esta llamada a la API Graph: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Coge el nuevo token de acceso de larga duración devuelto
  9. Realice una llamada a la API Graph para ver sus cuentas utilizando el nuevo token de acceso de larga duración: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Coge el access_tokende la página de la que extraerás información
  11. Pelusa la ficha para ver si está configurada Expires: Never.

Deberias hacer eso. Ahora debería tener un token de acceso a la página de Facebook que no caduca, a menos que:

  • Cambias la contraseña de tu cuenta de Facebook
  • Pierde el acceso de administrador a la página de destino
  • Elimina o desautoriza su aplicación de Facebook

Cualquiera de estos hará que el token de acceso deje de ser válido.

Si lo está recibiendo (#100) Tried accessing nonexisting field (accounts) on node type (Page), vaya al depurador de tokens de acceso , copie el valor de User IDy úselo para reemplazar la parte "yo" de la URL en el paso 9.

venganza roja
fuente
2
¿Cómo y dónde hago el paso 6?
Stefan Müller
5
@ StefanMüller Cuando hace clic en "Obtener token de acceso" en la página Graph API Explorer, aparece un cuadro de diálogo "Seleccionar permisos". La manage_pagesopción está debajo de la Extended Permissionspestaña.
redhotvengeance
2
¡Excelente! Esto funciona como un encanto, y se publica como la PÁGINA, no como un usuario.
Benjamin Piette
3
Creo que esto está desactualizado ahora. y solo obtiene un token de acceso que vence en aproximadamente dos meses.
Qaiser Wali
7
He hecho todo eso ahora y funciona, excepto que la identificación del token de larga duración vence después de 2 meses y no es infinita. Además, Acces Token Debugger tiene un enlace en la parte inferior del formulario para extender un token de acceso de corta duración a un token de acceso de larga duración.
SlimIT
15

Esto se trata en el documento de baja del acceso sin conexión

Use el token de 60 días para que el administrador de la página recupere un token de acceso a la página (a través de /PAGE_ID?fields=access_tokeno /me/accounts); el token de acceso a la página no tendrá una fecha de vencimiento

Igy
fuente
5
Suspiro. De hecho, este parece ser el boleto. Podría haber jurado que probé todas las combinaciones posibles de estos pasos; aparentemente, me perdí el que realmente funciona. Qué conjunto de acciones requeridas absolutamente intrincadas. ¡Muchas gracias por tu ayuda!
redhotvengeance
1
Tantas piezas en Internet, esta es una que realmente funciona.
Ernesto
¿Existe alguna forma de obtener estos 60 días page_access_tokenmediante código en javascript? Como la forma de conseguirlo user_access_token> FB.getAuthResponse()['accessToken'];¡Gracias!
Tulon
3

Un enfoque que funciona en 2019

Hace poco intenté lograr algo similar (al caso de uso descrito en este hilo), pero quería asegurarme de respetar las políticas actuales de Facebook, así que investigué un poco y aquí estoy compartiendo lo que encontré.

Mi caso de uso

Entonces, como ya dije, mi caso de uso es muy similar al que se describe aquí; es decir:

  • Estoy trabajando para un distrito escolar.
  • Están utilizando una herramienta de software para administrar prácticamente todo lo relacionado con el transporte escolar.
  • Esa herramienta les permite enviar notificaciones por correo electrónico (a los suscriptores) cuando publican alertas de retraso del autobús y alertas de cierre de escuelas.
  • Mucha gente en la comunidad sigue a la organización en su página de Facebook, y ese es el único lugar donde buscan esas alertas.
  • Entonces, un empleado de la organización tiene que publicar manualmente cada notificación en la página de Facebook (además de crearla en el software de transporte). Además, esas notificaciones finalmente caducan (o simplemente se eliminan antes de que caduquen), por lo que el empleado tiene que volver más tarde para eliminarlas manualmente también.
  • Es una pérdida de tiempo, por lo que lo que estamos tratando de hacer aquí es desarrollar un sistema simple que periódicamente sondee la base de datos de la herramienta de software en busca de notificaciones nuevas (y vencidas) y las actualice (es decir, agregue y elimine) en la página de Facebook.

Este es, en mi opinión, un caso de uso legítimo, pero no estaba seguro de cómo implementarlo de una manera que esté en línea con las políticas de Facebook.

La respuesta aceptada

Seguí los pasos de la respuesta aceptada y funcionó, excepto que las cosas parecen haber cambiado: ahora, aunque el token de página generado no caduca, access to datacaduca después de unos 60 días. También verá eso si sigue el procedimiento e inspecciona el token de la página en la herramienta FB Token Debugger Tool .

Además, el hecho de que los tokens de página generados estén vinculados a la cuenta de usuario también es lamentable, porque si el usuario actualiza su contraseña, el token de página también se invalida.

Cómo hacerlo en 2019

Después de varias horas de investigación, me encontré con el siguiente artículo de documentación de Facebook: Business Login for Direct Businesses .

Resulta que ahora es posible, siguiendo los pasos descritos en el artículo anterior, generar un token de página que no está asociado a ninguna cuenta de usuario de Facebook en particular y que no caducará (a menos que se elimine la aplicación FB o el token de la aplicación subyacente se elimina, ya sabes ...)

Así que aquí están los pasos y las partes más importantes:

  • Necesita una cuenta de Business Manager .
    • Se requerirá verificación y se deberá firmar un contrato digital.
  • Necesita agregar la página de Facebook de destino a esa cuenta.
  • Necesita crear una aplicación de Facebook y transferir esa aplicación a la misma cuenta de Business Manager.
  • La aplicación deberá pasar por el proceso de revisión de Facebook, porque se necesitarán los siguientes permisos: manage_pagesy publish_pages.
    • Nota importante Para que las publicaciones realizadas con el token de generación de página sean visibles para otros usuarios que no sean los administradores de la aplicación, esa aplicación deberá haber sido publicada y aprobada.
    • Aún puede experimentar con el concepto sin enviarlo a revisión, pero las publicaciones no serán visibles públicamente.
  • En la cuenta de Business Manager (solo después de que su aplicación y página se hayan agregado a la cuenta), debe crear lo que se llama un usuario del sistema y otorgarle a ese usuario el rol de administrador (o permisos) en la página de Facebook de destino.
    • Un usuario del sistema es propiedad de la cuenta de Business Manager y no está vinculado a un usuario específico. Mi conocimiento actual es que un caso de uso importante para un usuario del sistema es el acceso programático a la API Graph de Facebook (justo lo que necesitamos).
  • Luego, para ese usuario del sistema, debe generar un token de acceso (que nunca caducará). Se le pedirá que seleccione para qué aplicación. Luego, seleccionará su aplicación de destino.
  • Luego, deberá usar el token de la aplicación generado para generar un token de página, que tampoco caducará nunca. El procedimiento se describe en este artículo como:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Eso es.

Ese token nunca caducará y no estará vinculado a un usuario de Facebook en particular, ¡así que es exactamente lo que necesitamos!

La última parte es asegurarse de que Facebook apruebe su aplicación de Facebook. De hecho, es la parte más importante, porque todo el procedimiento es inútil si la gente no ve nuestras publicaciones.

Quería estar seguro de que podía confiar en el procedimiento anterior para crear algo para mi cliente sin que Facebook lo rechazara al final, así que, de antemano (es decir, antes de comenzar a trabajar en el proyecto de mi cliente), pasé por todo el proceso de creando una página, una aplicación, una cuenta de Business Manager, etc. Verifiqué mi negocio. Envié mi aplicación para su revisión. En mi solicitud, fui muy específico sobre mi caso de uso y enfaticé que la aplicación era para "uso propio" (es decir, que la organización está desarrollando una aplicación para sí misma, no para otros usuarios de Facebook). Me aprobaron en menos de 24 horas.

Algunas otras notas sobre el proceso de revisión de la aplicación:

  • Tuve que seleccionar una plataforma para la aplicación, así que seleccioné el sitio web .
  • Tuve que indicar por qué la aplicación necesitaba los dos permisos y cómo los iba a usar.
  • Tuve que indicar por qué el revisor no podría iniciar sesión en mi aplicación y probarla (es decir, porque la aplicación será utilizada por un proceso de trabajo).
  • Para los screencasts obligatorios, simplemente presenté operaciones manuales en el terminal usando la curlutilidad (para generar el token de la página y hacer publicaciones en la página de Facebook). También mostré cómo estaba usando Business Manager para vincular al usuario del sistema a la página y generar un token, y así sucesivamente.
  • Una vez más, fui muy específico sobre mi caso de uso, y creo que eso ayudó.

Espero que esta información sea útil para personas con casos de uso similares.

focorner
fuente
1

Muchas gracias a @redhotvengeance por la guía paso a paso.

Después de un tiempo, ahora se describe claramente en la documentación de Facebook:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Ampliación de tokens de acceso a la página

Las aplicaciones pueden recuperar un token de acceso a la página de los usuarios administradores de la página cuando se autentican con el permiso manage_pages. Si el token de acceso de usuario utilizado para recuperar este token de acceso a la página es de corta duración, el token de acceso a la página también será de corta duración.

Para obtener un token de acceso a la página de mayor duración, intercambie el token de acceso de usuario por uno de larga duración, como se indicó anteriormente, y luego solicite el token de acceso a la página. El token de acceso a la página resultante no tendrá fecha de caducidad.

Athlan
fuente
0

También puede copiar y pegar desde el panel de la aplicación en Facebook. Los pasos:

  1. Vaya a https://developers.facebook.com

  2. Seleccione su aplicación en la esquina superior derecha de la página (imagen de cómo se ve)

  3. Haga clic en Messenger desde las opciones de la izquierda (irá a la configuración automáticamente) (imagen de cómo se ve)
  4. Vaya a la sección "Generación de tokens" en la página. Seleccione para qué página desea generar el token. (foto de cómo se ve esa sección)
  5. Copia y pega el token de tu página donde lo necesites.

Tenga en cuenta que, si bien en teoría su token no caducará, está directamente vinculado a la cuenta de Facebook en la que haya iniciado sesión. Entonces, digamos que cambia su contraseña o elimina los permisos entre su cuenta y su aplicación, entonces su token ya no será válido.

Heidi
fuente