2012-02-04 11 views
6

Desidero consentire alle persone di accedere con "Accesso Facebook". ma, mi chiedo se sia abbastanza sicuro, o sto solo sbagliando.Accesso Facebook sicuro?

Quello che sto tornando dopo un login riuscito sono i dati utente, con facebook_id, che sto inserendo nel DB passato da un JavaScript reuest al server tramite handler poiché sto usando asp.net.

Ma, quello che penso che con un uso malevolo, si può cambiare quei dati. e inserisci spazzatura sul server o inserisci anche facebook_id diversi.

Quindi mi chiedo se il "login di Facebook" è abbastanza sicuro da usare, o che sto sbagliando. Ho pensato ad altra opzione per passare i dati del client al server - tramite il postback del server con una casella di testo runat = server nascosta, ma l'uso malevolo può ancora cambiare quelle caselle di testo. Ho letto qui sull'opzione di consentire agli utenti di aggiungere una password al proprio nome utente di Facebook, ma suona un po 'poco user-friendly.

Ho ragione? è un modo per farlo più sicuro? C'è qualche cookie che Facebook ha messo sul browser client che posso leggere dal server? come se molti siti web usassero questo "accesso Facebook" potrebbe esserci un altro modo in cui non pensavo ...

risposta

4

Passare il token di accesso al server (o controllarlo dal set di cookie di Facebook) e quindi chiamare il server https://graph.facebook.com/me?access_token=... e ottenere l'ID di Facebook in questo modo. È possibile ottenere il access_token chiamando FB.getLoginStatus dal sdk javascript.

+0

quale token di accesso? Non lo capisco dopo un accesso utente. – Yaniv

0

E 'importante effettuare una chiamata indipendente dal server, soprattutto se si archiviano il loro Facebook User ID in un database o qualcosa del genere. In questo modo, sai se è valido o meno.

In primo luogo, dopo aver chiamato la funzione FB.init in JavaScript SDK, si vuole ottenere l'accesso dell'utente token e facebook id utente tramite il Javascript SDK simile a questo:

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

In secondo luogo, una volta ottenuto un token e un ID utente di Facebook, vorrai passare quelle variabili al tuo server. Se si utilizza WCF o qualche altra forma di servizio web insieme a JSON.NET, si potrebbe creare un metodo come questo:

 [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. 


     } 

Ora avete convalidato che l'utente è chi dicono di essere.

Problemi correlati