Вход в Facebook безопасен? - PullRequest
       17

Вход в Facebook безопасен?

6 голосов
/ 04 февраля 2012

Я хочу позволить людям входить в систему с помощью «входа в Facebook». но мне интересно, достаточно ли это безопасно, или я просто делаю это неправильно.

После успешного входа в систему я получаю данные пользователя с идентификатором facebook_id, который я вставляю в БД, передаваемую с помощью JavaScript, на сервер через обработчик, поскольку я использую asp.net.

Но я думаю, что с помощью злонамеренного использования эти данные можно изменить. и вставьте мусор на сервер, или даже вставьте другой facebook_id.

Так что мне интересно, достаточно ли безопасен «логин на Facebook» или я ошибаюсь? Я подумал о другом варианте передачи этих клиентских данных на сервер - путем обратной передачи на сервер со скрытыми текстовыми полями runat = server, но все же злонамеренное использование может изменить эти текстовые поля. Я читал здесь о возможности разрешить пользователям добавлять пароль к своему имени пользователя в Facebook, но это звучит не совсем удобно.

Я прав? это способ сделать это более безопасным? Существуют ли какие-либо файлы cookie, которые Facebook помещает в клиентский браузер, которые я могу читать с сервера? как будто многие веб-сайты используют этот «логин Facebook», возможно, есть другой способ, о котором я не думал ...

Ответы [ 3 ]

4 голосов
/ 04 февраля 2012

Передайте токен доступа на сервер (или проверьте его с помощью файлов cookie, установленных Facebook), а затем попросите сервер позвонить https://graph.facebook.com/me?access_token=... и получить идентификатор Facebook. Вы можете получить access_token, вызвав FB.getLoginStatus из javascript sdk.

0 голосов
/ 04 июня 2013

Важно сделать независимый звонок с сервера, особенно если вы храните их идентификатор пользователя в Facebook или что-то в этом роде. Таким образом, вы знаете, действительно ли он действителен.

Во-первых, после вызова функции FB.init в Facebook Javascript SDK вы хотите получить токен доступа пользователя и идентификатор пользователя Facebook через Javascript SDK, аналогично следующему:

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

Во-вторых, как только вы получите токен и идентификатор пользователя Facebook, вы захотите передать эти переменные на свой сервер. Если вы используете WCF или какую-либо другую форму веб-службы вместе с JSON.NET , вы можете создать такой метод, как этот:

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


        }

Теперь вы подтвердили, что пользователь является тем, кем они себя называют.

0 голосов
/ 04 февраля 2012

Вы можете использовать oauth, чтобы перенести эту операцию на сервер.

Посмотрите этот пост в блоге:

http://you.arenot.me/2010/09/28/facebooks-graph-api-and-asp-net/

...