2012-02-04 40 views
6

Tôi muốn cho phép mọi người đăng nhập bằng "Đăng nhập Facebook". nhưng, tôi tự hỏi nếu nó là đủ an toàn, hoặc tôi chỉ làm điều đó sai.Đăng nhập Facebook an toàn?

Những gì tôi đang quay trở lại sau khi đăng nhập thành công là dữ liệu người dùng, với facebook_id, mà tôi chèn vào DB được chuyển bởi một JavaScript reuest đến máy chủ thông qua trình xử lý vì tôi đang sử dụng asp.net.

Nhưng, điều tôi nghĩ là do sử dụng độc hại, người ta có thể thay đổi dữ liệu đó. và chèn rác vào máy chủ, hoặc thậm chí chèn facebook_id khác nhau.

Vì vậy, tôi tự hỏi liệu "Đăng nhập Facebook" có đủ an toàn để sử dụng hay không hoặc tôi đang làm sai. Tôi nghĩ về tùy chọn khác để chuyển dữ liệu khách hàng đó đến máy chủ - bằng cách postback máy chủ với một hộp văn bản ẩn = máy chủ chạy nhưng vẫn sử dụng độc hại có thể thay đổi các hộp văn bản đó. Tôi đã đọc ở đây về tùy chọn để cho phép người dùng thêm mật khẩu vào tên người dùng Facebook của họ nhưng có vẻ hơi thân thiện với người dùng.

Tôi có đúng không? là một cách để làm điều đó an toàn hơn? Có cookie nào mà Facebook đặt trên trình duyệt của khách hàng mà tôi có thể đọc từ máy chủ không? như thể rất nhiều trang web sử dụng "đăng nhập Facebook" này có thể có một cách khác mà tôi không nghĩ đến ...

Trả lời

4

Vượt qua mã thông báo truy cập đến máy chủ (hoặc kiểm tra nó từ cookie Facebook đặt) và sau đó có máy chủ gọi https://graph.facebook.com/me?access_token=... và nhận ID Facebook theo cách đó. Bạn có thể lấy access_token bằng cách gọi FB.getLoginStatus từ sdk javascript.

+0

mã thông báo truy cập nào? im không nhận được rằng sau khi đăng nhập người dùng. – Yaniv

0

Điều quan trọng là để thực hiện cuộc gọi độc lập với máy chủ, đặc biệt là nếu bạn đang lưu trữ user id facebook của họ trong một cơ sở dữ liệu hoặc một cái gì đó. Bằng cách đó, bạn biết nó có hợp lệ hay không.

Thứ nhất, sau khi gọi FB.init chức năng trong Facebook Javascript SDK, bạn muốn nhận được quyền truy cập của người dùng user id token và facebook qua Javascript SDK tương tự như sau:

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

Thứ hai, một khi bạn có một mã thông báo và ID người dùng facebook, bạn sẽ muốn chuyển các biến đó tới máy chủ của bạn. Nếu bạn đang sử dụng WCF hoặc một số hình thức khác của dịch vụ web cùng với JSON.NET, bạn có thể tạo ra một phương pháp như thế này:

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


     } 

Bây giờ bạn đã xác nhận rằng người dùng là những người mà họ nói họ đang có.

Các vấn đề liên quan