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

Я пишу приложение 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?

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

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

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

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

7
задан unBrice 1 December 2011 в 13:23
поделиться