У меня есть настольное клиентское приложение «C» и серверное приложение «S», написанные на C ++ и находящиеся на разных машинах. В настоящее время они общаются через TCP. Конфиденциальные пользовательские данные хранятся на букве «S».
Текущий поток входа следующий: пользователь вводит свои учетные данные в 'C', они отправляются в зашифрованном виде на 'S', 'S' сравнивает их с учетными данными, которые он имеет в специальной базе данных 'D' для этого пользователя. . Если учетные данные действительны, S предоставляет клиенту данные для конкретного пользователя. В противном случае в соединении будет отказано. Регистрация новых пользователей осуществляется через централизованный веб-сервер, который отправляет учетные данные на «S», и они помещаются в «D».
Я хочу, чтобы пользователи клиента могли входить в систему через Facebook с помощью кнопки «Войти через Facebook» на текущем экране входа (в настоящее время у меня есть только User и Pass). Мне нужен только логин, никакой другой интеграции. Я буду использовать номер FacebookID пользователя в качестве идентификатора в базе данных D.
Я прочитал документацию Facebook , и они рекомендуют встроить веб-браузер в клиент, открыть специальный диалог аутентификации, в котором передается идентификатор вашего приложения, а затем выполняется прослушивание изменения URI, чтобы получить от него токен доступа (это описано в конце приведенной выше документации). Это именно то, что я планирую сделать.У меня уже есть встроенный в клиент веб-браузер. Он откроет там диалоговое окно аутентификации, прослушает изменение URI в коде C ++ и получит токен доступа из URI. Затем клиент отправит токен доступа на сервер «S». «S» отправит HTTP-запрос к Facebook, передав токен доступа, и Facebook ответит личными данными пользователя. «S» считывает FacebookID пользователя и помещает его в пользовательскую базу данных «D», если его там еще нет. Если он уже существует, клиенту предоставляются конфиденциальные пользовательские данные.
В решениях 1 и 2 клиент также должен будет передать ClientID, чтобы Сервер мог идентифицировать его при попытке подключения.
Считаете ли вы мое решение хорошим и достаточно безопасным по сравнению с другими решениями? Безопасно ли передавать токен доступа от клиента к серверу? Видите ли вы другие потенциальные проблемы с моим решением?
Заранее спасибо