Интеграция входа в Facebook в клиент-серверное приложение для ПК - PullRequest
7 голосов
/ 10 декабря 2011

Ситуация

У меня есть настольное клиентское приложение 'C' и серверное приложение 'S', написанные на C ++, которые находятся на разных компьютерах.В настоящее время они общаются через TCP.Чувствительные пользовательские данные хранятся в «S».

Текущий поток входа в систему следующий: пользователь вводит свои учетные данные в «C», они отправляются в зашифрованном виде в «S», «S» сравнивает ихс учетными данными, которые он имеет в специальной базе данных «D» для этого пользователя.Если учетные данные действительны, S предоставляет клиенту специфичные для пользователя данные.В противном случае в соединении будет отказано.Регистрация новых пользователей осуществляется через централизованный веб-сервер », который отправляет учетные данные в« S », и они помещаются в« D ».

Проблема

Я хочу, чтобы пользователи клиента быливозможность войти через Facebook с помощью кнопки «Войти через Facebook» на текущем экране входа (в настоящее время у меня есть только пользователь и пароль).Мне нужен только логин, никакой другой интеграции.Я буду использовать номер FacebookID пользователя в качестве идентификатора в базе данных D.

Решение

Я прочитал документацию Facebook , и они рекомендуют встраивать сетьв браузере клиента откройте специальный диалог авторизации, передавая идентификатор вашего приложения, а затем прослушайте изменение URI, чтобы получить от него токен доступа (это описано в конце вышеприведенной документации).Это именно то, что я планирую сделать.У меня уже есть веб-браузер, встроенный в клиент.Он откроет там диалог аутентификации, прослушает изменение URI в коде C ++ и получит токен доступа из URI.Затем клиент отправит токен доступа на сервер «S».«S» отправит HTTP-запрос в Facebook, передав маркер доступа, и Facebook ответит личными данными пользователя.«S» читает FacebookID пользователя и помещает его в базу данных пользователей «D», если его там еще нет.Если он уже есть, клиент получает конфиденциальные данные, специфичные для пользователя.

Альтернативные решения

  1. Используйте локальный браузер компьютера пользователя для открытия диалога Facebook вместо диалогового окна Facebook.встроенный (пользователь будет чувствовать себя в большей безопасности).Facebook перенаправит браузер пользователя на сервер «S», передав ему токен доступа.В этом случае я должен сделать прослушиватель 'S' HTTP (поместите на него веб-сервер C ++).Проблема здесь в том, что Facebook разрешает перенаправление только на заранее определенные домены (перечисляются заранее), и каждый раз, когда я хочу протестировать с другим сервером 'S' (довольно часто), мне придется вводить его в элемент управления приложения Facebookпанель.
  2. Использовать текущий текущий веб-сервер, о котором я упоминал в начале.Я перенаправлю локальный браузер пользователя на этот веб-сервер, который запустит серверную логику PHP для перехода пользователя в диалоговое окно авторизации, получения токена доступа и передачи его S, который получит от него FacebookID.

В решениях 1 и 2 клиент также должен будет передать ClientID, чтобы сервер мог идентифицировать его при попытке подключения.

Мой вопрос

Как вы думаете, мое решениехорошо и достаточно безопасно по сравнению с другими решениями?Безопасно ли передавать токен доступа с клиента на сервер?Видите ли вы другие потенциальные проблемы с моим решением?

Заранее спасибо

1 Ответ

1 голос
/ 30 декабря 2011

Для меня это выглядит хорошим подходом, если вы используете https (что вы действительно заявляете) для связи от C до S.

Я бы предложил создавать разные приложения для каждогоS-серверы, с которыми вы будете иметь дело.Например, когда я разрабатываю приложение, у меня есть три приложения на Facebook.Один для моей местной коробки.Один для тестовой среды и один для производства.Затем сохраните идентификатор приложения в конфигурационном файле, который зависит от среды.

Кроме того, вместо использования текущего поля имени пользователя для идентификатора пользователя Facebook создайте новое.Таким образом, существующие люди все еще могут войти в систему со своими текущими учетными данными, и те, кто принимает логин Facebook, легко делают это.Это также дает вам быстрый способ определить, какой тип учетных данных установлен каждым пользователем, что упрощает проверку его учетных данных.

...