2012-02-04 18 views
6

Quiero permitir que las personas inicien sesión con "inicio de sesión de Facebook". pero, me pregunto si es lo suficientemente seguro, o simplemente lo estoy haciendo mal.Facebook login secure?

Lo que obtengo después de un inicio de sesión exitoso son los datos del usuario, con el facebook_id, que estoy insertando en la base de datos pasado por JavaScript en el servidor a través del controlador, ya que estoy usando asp.net.

Pero, lo que creo que por un uso malicioso, uno puede cambiar esa información. e inserte desperdicios en el servidor, o incluso inserte diferentes facebook_id.

Así que me pregunto si el "inicio de sesión de Facebook" es lo suficientemente seguro para usar, o si lo estoy haciendo mal. Pensé en otra opción para pasar los datos del cliente al servidor: por devolución de datos el servidor con un runat oculto = cuadros de texto del servidor pero aún así, el uso malicioso puede cambiar esos cuadros de texto. He leído aquí sobre la opción de permitir a los usuarios agregar una contraseña a su nombre de usuario de Facebook, pero suena un poco no fácil de usar.

¿Estoy en lo cierto? ¿Es esa una forma de hacerlo más seguro? ¿Hay alguna cookie que Facebook haya puesto en el navegador del cliente que pueda leer desde el servidor? como si muchos sitios web usaran este "inicio de sesión de Facebook" podría haber otra manera en la que no pensé ...

Respuesta

4

Pase el token de acceso al servidor (o búsquelo de los conjuntos de Facebook de la cookie) y luego haga que el servidor llame al https://graph.facebook.com/me?access_token=... y obtenga la identificación de Facebook de esa manera. Puede obtener access_token llamando al FB.getLoginStatus desde JavaScript sdk.

+0

¿qué token de acceso? No estoy obteniendo eso después de un inicio de sesión de usuario. – Yaniv

0

Es importante realizar una llamada independiente del servidor, especialmente si va a guardar su ID de usuario de Facebook en una base de datos o algo así. De esta forma, usted sabe si es válido o no.

En primer lugar, después de llamar a la funciónFB.init en el Facebook Javascript SDK, que desea obtener el acceso del usuario token y facebook Identificación del usuario a través del SDK Javascript similar a esto:

  FB.getLoginStatus(function (response) 
      { 
       if (response.status === 'connected') 
       { 
        var token = response.authResponse.accessToken; 
        var facebookUserID = response.authResponse.userID; 
       } 
      }); 

En segundo lugar, una vez que haya obtenido una identificación de usuario de token y Facebook, querrá pasar esas variables a su servidor. Si está utilizando WCF o alguna otra forma de servicio web, junto con JSON.NET, se podría crear un método como este:

 [WebInvokeAttribute(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
     [OperationContractAttribute] 
     public Stream AuthenticateFacebook(string facebookUserId, string token) 
     { 
      var json = new WebClient().DownloadString(string.Format("https://graph.facebook.com/me?access_token={0}", token)); 

      JObject parsedJson = JObject.Parse(json); 

      //Ensure that there isn't a random Facebook server error 
      if (parsedJson["error"] != null) 
      { 
       throw new FaultException("Error parsing Facebook token."); 
      } 

      //Ensure the facebook user ID passed in via the client matches the one received from the server. 
      if (Convert.ToString(parsedJson["id"]) != facebookUserId) 
      { 
       throw new FaultException("Facebook login ids do not match. Something fishy is going on..."); 
      } 

      //Now you know you have a valid facebook login id. Do your database stuff or whatever else here. 


     } 

Ahora ha validado que el usuario es quien dice ser.