Tengo una aplicación de Facebook para lienzos. Estoy usando JS SDK para autenticar al usuario en el navegador y solicitar información a través de FB.api (por ejemplo, nombre, amigos, etc.).Cómo pasar el Id de Facebook del cliente al servidor de forma segura
También quiero persistir alguna información adicional del usuario (no se celebró en Facebook) a la base de datos en mi servidor al hacer una llamada AJAX:
{ userFavouriteColour: "Red" }
Para guardar esto en el servidor y asociarse con el usuario correcto , Necesito saber el uid de Facebook y esto presenta un problema. ¿Cómo paso el uid desde el cliente al servidor?
Opción 1: Añadir fluido a la petición ajax:
{ uid: "1234567890",
userFavouriteColour: "Red" }
Esto obviamente no es bueno. Sería trivial para cualquier persona hacer una solicitud de AJAX a mi servicio web usando el ID de Facebook de otra persona y cambiar su color favorito.
Opción 2: en el servidor, extraer el uid de una cookie: ¿Esto es posible? He leído que Facebook establece una cookie que contiene el token uid y de acceso, pero ¿tengo acceso a esta cookie en mi dominio? Más importante aún, ¿puedo segura extraer el fluido forma la cookie o se trata abierta a la suplantación de identidad al igual que la opción 1.
Opción 3: El usuario de autenticación de servidor en el servidor: que podía usar el servidor- Autenticación lateral para validar la identidad del usuario en mi servidor. Pero, ¿funcionará si ya estoy usando la autenticación del lado del cliente en el navegador? ¿Terminaré con dos tokens de acceso diferentes? Me gustaría realizar solicitudes FB.api desde el navegador, así que necesito el token de acceso en el cliente (no solo en el servidor).
Esto debe ser un escenario muy común, así que creo que me falta algo fundamental. He leído mucha de la documentación de Facebook (varios flujos de autenticación, tokens de acceso, signed_request, etc.) y muchas publicaciones en SO, pero todavía no entiendo cómo la autenticación del lado del cliente y la autenticación del lado del servidor funcionan muy bien juntas.
En resumen, quiero saber la identidad del usuario en el servidor pero aún así hacer las solicitudes a la API de Facebook desde el navegador del cliente?
(estoy usando ASP.NET y C# SDK de Facebook en el servidor)
EDITAR: Añadido recompensa. Esperaba obtener una recomendación oficial más deifnitiva sobre cómo manejar esta situación, o incluso un ejemplo. Como ya he dicho, ya he leído muchos de los documentos oficiales de FB sobre los flujos de autenticación, pero todavía no encuentro nada definitivo sobre cómo la autenticación del lado del cliente y la del lado del servidor funcionan juntas.
Si paso el accessToken a través de ajax, ¿hay alguna manera de extraer el userId de Facebook del token en mi servidor sin hacer una solicitud a Facebook? ¿Y esto es seguro contra el spoofing? No deseo hacer una solicitud de API FB desde mi servidor, por lo que quiero extraer la Id del usuario en función de la información pasada por el cliente. – njr101
, FB.getLoginStatus (https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/) en el Javacript devuelve más el token de acceso pero también el ID de usuario, para que pueda enviarlo al servidor lado ... – Roni
Gracias por el enlace, que explica cómo obtener el ID de usuario en el cliente. Tal vez no me estoy explicando muy claramente. Si paso ese ID de usuario a mi servidor, estará abierto a suplantación. ¿Cómo obtengo el ID de usuario en el servidor de forma segura? – njr101