В Google App Engine можно ли связать токен Google OAuth 2 и токен SACSID, полученные с помощью Android AccountManager?

Я пишу приложение Google App Engine вместе с клиентом CLI, клиентом Android и клиентом Javascript. Цель этого приложения - позволить пользователю управлять телефоном Android, на котором установлен клиент Android, с помощью CLI или клиента Javascript.

Аутентификация играет решающую роль, так как ошибка может позволить злоумышленнику контролировать чужие телефоны.

Android-клиент написан и работает. Это аутентифицирует пользователя, используяЭтот способ, По сути, это дает мне так называемый токен SACSID, который я могу сохранить в cookie. Когда этот cookie установлен, App Engine распознает моего пользователя. Затем серверное приложение может вызвать UserService, чтобы получить пользователя, которому необходимо вызвать getUserId (). getUserId () возвращает мне непрозрачную строку, которая идентифицирует моего пользователя. Все идет нормально.

Сейчас я пишу клиенты JS и CLI. Поскольку у клиента CLI нет надежного способа отображения CAPTCHA или открытия браузера, я полагаю, что ему необходимо использоватьAPI устройства («Логин клиента» не является опцией). Этот API требует использования OAuth 2 для аутентификации. Кроме того, я хочу, чтобы клиент JS имел доступ к контактам пользователя, что также указывает на то, что OAuth 2 подойдет.

Если мой пользователь аутентифицируется с помощью OAuth 2, смогу ли я каким-то образом преобразовать этот токен Google OAuth 2 в ту же непрозрачную строку, которую получаю при подключении клиента Android? Если нет, могу ли я изменить свое Android-приложение, чтобы оно использовало OAuth вместо токена Sacsid?

Чтобы быть более конкретным, я вижу три вещи, которые решат мою проблему:

Способ получения токена OAuth 2 от менеджера аккаунтаСпособ обмена токена OAuth 2 на токен SACSIDСпособ получения одинакового непрозрачного идентификатора пользователя как с токеном SACSID, так и с OAuth2, но только в том случае, если я могу использовать обе системы аутентификации в одном приложении.

Нечто похожее на третье возможное решение состоит в том, чтобы получить адрес электронной почты пользователя из OAuth и токена SACSID и использовать его в качестве идентификатора пользователя. Это, однако, выглядит немного неуклюже для меня:

Каждый раз, когда я получаю запрос OAuth 2, мне нужно будет вызывать API Google для получения адреса электронной почты пользователя (или создать собственную систему токенов, которая кажется небезопасной и создает много других трудностей).Адрес электронной почты данного пользователя может измениться, из-за чего я теряю связь между пользователем и его предыдущими данными.