2012-02-04 20 views
6

「Facebookのログイン」でログインできるようにしたい。 しかし、十分に安全かどうか、あるいは間違っているのだろうかと思います。Facebookのログインは安全ですか?

ログインが成功した後に戻ってきたのは、asp.netを使用しているので、JavaScriptのreuestをサーバーにハンドラ経由で渡したDBに挿入しているfacebook_idのユーザーデータです。

しかし、私は悪意のある使用によって、そのデータを変更できると考えています。サーバーにゴミを入れたり、別のfacebook_idを挿入することさえできます。

"Facebookのログイン"が十分に安全であるか、間違っているのだろうかと思います。 私は、そのクライアントデータをサーバーに渡すための他のオプションについて考えました。隠されたrunat =サーバーテキストボックスをサーバーにポストバックしても、悪意のあるユーザーがそれらのテキストボックスを変更する可能性があります。ここでは、ユーザーが自分のFacebookのユーザー名にパスワードを追加できるようにするオプションについて説明しましたが、ユーザーフレンドリーではないようです。

私は正しいですか?より安全な方法ですか? Facebookがクライアントブラウザに置いたクッキーはありますか?多くのウェブサイトがこの「Facebookのログイン」を使用しているように、私が考えなかった別の方法があるかもしれません...

答えて

4

アクセストークンをサーバーに渡すか、またはCookieのFacebookセットからチェックします。サーバーの電話番号はhttps://graph.facebook.com/me?access_token=...で、Facebook IDはそのようになります。あなたはjavascript sdkからFB.getLoginStatusを呼び出すことによってaccess_tokenを得ることができます。

+0

どのアクセストークンですか?ユーザーのログイン後にそれを取得していません。 – Yaniv

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. 


     } 

関連する問題