Estoy desarrollando una aplicación para iPhone, que se basa en la comunicación con el servidor, y quiero utilizar los mecanismos de autenticación de Facebook.
Básicamente, creo que debería funcionar así:
- En la aplicación de mi iPhone, el usuario inicia sesión en Facebook con su correo electrónico y contraseña.
- El usuario permite el acceso a sus datos para la aplicación de Facebook relacionada.
- La aplicación de mi iPhone recibe el token de acceso después de iniciar sesión correctamente.
- En una mayor comunicación con mi servidor, mi aplicación de iPhone debe usar el token de acceso de Facebook recibido (por ejemplo: en consultas).
- Cuando mi servidor recibe alguna consulta de la aplicación de iPhone, con token de acceso, debe preguntarle a Facebook que este token es válido (y para quién), y si es así, el servidor debe asumir que el usuario está autenticado con Facebook.
Mi pregunta es: ¿cómo debe el servidor preguntarle a Facebook si el token de acceso dado es válido? Creo que de alguna manera debería verificar si el token es válido para mi aplicación de Facebook.
He probado muchas consultas de Facebook para graficar API, que he encontrado, pero nada funcionó como esperaba. ¿Me puede dar algún ejemplo?
iphone
facebook
authentication
Marcin
fuente
fuente
Respuestas:
Aquí hay un proceso de dos pasos que puede utilizar para validar que un token de acceso de usuario pertenece a su aplicación:
1) Genere un token de acceso a la aplicación
( https://developers.facebook.com/docs/howtos/login/login-as-app/ )
2) Depurar el token de acceso de usuario
( https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/ )
Donde INPUT_TOKEN es el token de acceso de usuario que desea verificar y ACCESS_TOKEN es el token de su aplicación que obtuvo en el paso 1.
El punto final de depuración básicamente descarga toda la información sobre un token, por lo que responderá con algo como esto:
Si ese token no es de "su aplicación", devolverá una respuesta de error.
fuente
Supongo que ya tiene el token de acceso en la mano. En tal caso, la forma más sencilla de validar un token de acceso es emitir la siguiente solicitud
Aquí reemplace @accesstoken con el token de acceso que tiene. Desglosaré la URL y explicaré cada una.
Estamos emitiendo una solicitud de API de gráfico aquí que devolverá el ID de usuario de Facebook del propietario del token de acceso como una cadena JSON. La palabra clave 'yo' representa al usuario actualmente conectado o al propietario del token de acceso. Para esta solicitud, el token de acceso es un parámetro obligatorio.
Si el token de acceso proporcionado no es válido o ha caducado, Facebook simplemente devolverá un mensaje de error de algún tipo.
Para un token de acceso válido, el resultado de alguna manera se verá así
fuente
Otra solución sería usar
https://graph.facebook.com/app/?access_token=[user_access_token]
como se describe en Obtener la identificación de la aplicación del token de acceso del usuario (o verificar la aplicación de origen para un token) .Esta parece ser una característica no documentada, pero devuelve JSON que contiene el ID de la aplicación para la que se generó el token. Si el token no era para su aplicación, devuelve 400.
fuente
En la última versión de facebook (2.2) puedes hacerlo de esta manera:
Salida de muestra:
fuente
Puede descargar el SDK de Facebook para PHP desde GitHub .
fuente
Si un usuario te ha pasado un UID de Facebook que afirma que es suyo y quieres comprobar si es legítimo, esta es una función de Python que lo verificará con su token de acceso (una implementación de la respuesta de Robin Jome):
fuente
Este es el único método seguro para verificar el token de usuario con solo una solicitud:
Tenga en cuenta que un signo "|" en la URL anterior no se usa como OR sino como separador y debe estar allí después de completar los otros campos.
La respuesta será JSON con el siguiente aspecto:
Referencia: https://developers.facebook.com/docs/facebook-login/access-tokens/#apptokens (el método anterior se menciona al final de esta sección)
fuente
Junto con un token de acceso, Facebook también envía un parámetro "expires_in", que es un valor de compensación. Úselo para calcular cuándo caducará el token de acceso como NSDate. Luego, cuando necesite hacer una solicitud, compare la fecha actual con la fecha de vencimiento.
También intente inspeccionar los códigos de estado y las cadenas de respuesta que envía Facebook.
fuente