Как реализовать авторизованный доступ к моему веб-приложению после процесса входа в сервисы Google Play - PullRequest
0 голосов
/ 27 октября 2018

Я занимаюсь разработкой игры на C ++ с использованием игрового движка Cocos2dx 3.x в студии android. Чтобы создать нужные функции в моей игре, я интегрировал пакеты Cocos2dx, sdkbox и google play services C++ sdk в один проект, и он в значительной степени основан на android NDK. Сервисы Google Play управляют моей ячеистой сетью и одноранговыми сообщениями между устройствами, но для обработки пользовательских данных (особенно больших данных, таких как изображения) я почувствовал необходимость использовать бэкэнд-сервис, который может подключаться к какой-либо системе баз данных (Возможно MySQL). Так что в конечном итоге я мог отправлять и получать данные для своих игроков через запросы сокетов и / или http. Сервисы Google Play предоставляют механизм моментальных снимков для сохраненных игр, но он ограничен 3 МБ, как они указывают в своем руководстве по API (https://developers.google.com/games/services/android/savedgames).. Это не только недостаточно для обработки данных моего игрока, но и объяснил в этой ссылке, я хотел бы не иметь административных полномочий над сохраненными играми (как было бы возможно, если бы они хранились в MySQL).

Поэтому я подумал об аутентификации моего веб-приложения с помощью сервисов Google Play (это казалось разумным, поскольку было бы невозможно попросить пользователей создать учетные данные для входа в мое веб-приложение после того, как они уже вошли в мою игру, используя свой аккаунт Google. ). Другими словами, как только пользователь войдет в систему со своей учетной записью Google, каким-то образом используйте токен или секрет, сгенерированный Google, для аутентификации запросов, отправленных в мое собственное веб-приложение и из него . В поисках этого я наткнулся на эту ссылку: https://developers.google.com/games/services/android/offline-access В этом руководстве упоминается использование класса GoogleSignInOptions, в котором API предоставляется на Java, и я не смог найти его эквивалент в C ++ API для сервисов Google Play.

Моя игра успешно входит в сервисы Google Play через объект класса gpg::GameServices, и, вызывая метод gpg::GameServices::Builder().SetOnAuthActionFinished для этого объекта, я назначаю обратный вызов всякий раз, когда пользователь вызывает метод gameServicesObj->StartAuthorizationUI(). Как только логин возвращается с успешными объектами gpg::AuthOperation и gpg::AuthStatus, пользовательские данные выбираются путем вызова gameServicesObj->Players().FetchSelf и т. Д. Нигде в этом процессе я не мог найти метод, подобный GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestServerAuthCode.(webClientId).build(), как упомянуто в приведенной выше ссылке. Я относительно новичок в концепции веб-приложений и процессов аутентификации / авторизации, и мои вопросы сводятся к следующему:

  1. Как я могу использовать сервисы Google Play C ++ SDK для аутентификации моего веб-приложения на клиентском устройстве проигрывателя, когда они входят в систему со своими аккаунтами Google? (возможно ли это, я не уверен в этом)
  2. Если вы порекомендуете использовать Firebase для всего процесса, смогу ли я иметь административный доступ к базе данных пользователей напрямую (т.е. изменять пользовательские данные напрямую, не имея ограниченного доступа)?
  3. Если ваша рекомендация заключается в использовании настраиваемого сокетного или http-соединения с моей внешней базой данных и веб-приложением, как мне реализовать аутентификацию / авторизацию (возможно, с использованием информации об идентификаторе игрока и т. Д.) Поверх входа в сервисы Google Play (не заново изобрести колесо и воспользоваться уже предоставленной безопасностью)?
  4. Наконец, какой бы метод вы ни рекомендовали мне, я был бы очень признателен. В таком случае, не могли бы вы также указать мне правильное направление для обеспечения надлежащей безопасности? (т. е. https через http, и / или пользовательская авторизация, возможно, с использованием oauth, если возможно?)

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

...