2012-02-04 63 views
6

我想讓人們用「Facebook登錄」登錄。 但是,我不知道它是否足夠安全,或者我只是做錯了。Facebook登錄安全嗎?

成功登錄後我得到的是用戶數據,其中包含facebook_id,我將其插入到數據庫中,因爲我正在使用asp.net,所以通過處理程序將JavaScript請求傳遞給服務器。

但是,我認爲通過惡意使用,可以更改該數據。並向服務器插入垃圾,甚至插入不同的facebook_id。

所以我想知道「Facebook登錄」是否足夠安全使用,或者我做錯了。 我想過其他選項將客戶端數據傳遞給服務器 - 通過回發服務器的隱藏runat =服務器文本框,但仍然惡意使用可以更改這些文本框。我在這裏閱讀了關於讓用戶將密碼添加到他們的Facebook用戶名的選項,但這聽起來有點不方便。

我對不對?這是一種更安全的方法嗎? Facebook上放置的客戶端瀏覽器中是否存在可從服務器讀取的cookie?好像很多網站使用這個「Facebook登錄」,可能有另一種方式,我沒有想到...

回答

4

將訪問令牌傳遞到服務器(或從cookie的Facebook集檢查它),然後讓服務器調用https://graph.facebook.com/me?access_token=...並以這種方式獲取Facebook ID。您可以通過從javascript sdk調用FB.getLoginStatus來獲取access_token。

+0

什麼訪問令牌?即時通訊不會在用戶登錄後得到。 – Yaniv 2012-02-04 16:23:43

0

使來自服務器的獨立電話,特別是如果你在數據庫中存儲或某事他們的Facebook用戶ID是很重要的。這樣,你知道它是否有效。

首先,調用了Facebook的Javascript SDK的FB.init功能後,你想獲得通過的JavaScript SDK類似這樣的用戶的訪問令牌和Facebook用戶ID:

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

其次,一旦你獲得了令牌和Facebook用戶ID,你就會想要將這些變量傳遞給你的服務器。如果你正在使用WCF或JSON.NET以及Web服務的一些其他形式,你可以創建一個方法,像這樣:

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


     } 

現在,您已經驗證該用戶是誰,他們說他們是。