Я пишу приложение Google App Engine вместе с клиентом CLI, клиентом Android и клиентом Javascript. Это приложение предназначено для управления телефоном Android, на котором установлен клиент Android, с помощью интерфейса командной строки или клиента Javascript.
Аутентификация играет решающую роль, поскольку ошибка может позволить злоумышленнику контролировать чужие телефоны.
Android-клиент написан и работает. Он аутентифицирует пользователя, используя этот метод . По сути, это дает мне так называемый токен SACSID, который я могу хранить в файле cookie. Когда этот файл cookie установлен, App Engine распознает моего пользователя. Затем серверное приложение может вызвать UserService, чтобы получить пользователя, для которого нужно вызвать getUserId (). getUserId () возвращает мне непрозрачную строку, которая идентифицирует моего пользователя. Все идет нормально.
Сейчас я пишу клиентов JS и CLI. Поскольку у клиента CLI нет надежного способа отображения CAPTCHA или открытия браузера, я предполагаю, что ему необходимо использовать Device API («Вход клиента» не является вариантом). Этот API требует использования OAuth 2 для аутентификации. Кроме того, я хочу, чтобы клиент JS имел доступ к контактам пользователя, что также указывает на то, что OAuth 2 подойдет.
Если мой пользователь аутентифицируется с помощью OAuth 2, смогу ли я каким-то образом преобразовать этот токен Google OAuth 2 в ту же непрозрачную строку, которую я получаю при подключении клиента Android? Если нет, могу ли я изменить свое Android-приложение так, чтобы оно использовало OAuth вместо токена Sacsid?
Чтобы быть более конкретным, я вижу три вещи, которые могут решить мою проблему:
Что-то похожее на третье возможное решение - получить адрес электронной почты пользователя как из OAuth, так и из токена SACSID и использовать его в качестве идентификатора пользователя. Однако мне это кажется немного неуклюжим: