Как мой сервер может аутентифицировать пользователей Android по их учетным записям Google?

1

Я создаю приложение для Android как часть архитектуры клиент/сервер, где мой сервер будет предоставлять услугу клиенту Android. Сервер не будет связываться с каким-либо сервером Google, но ему необходимо будет аутентифицировать пользователя через свою учетную запись gmail. То есть сервер должен быть уверен, что запросы http (s), поступающие с телефона, действительно принадлежат человеку с указанной учетной записью gmail.

Я изучал платформу Android C2DM, которую я, безусловно, могу использовать для передачи данных, связанных с обслуживанием, туда и обратно, но как я могу использовать аутентификацию учетной записи Google между телефоном Android и сторонним (не-Google) сервером?

Будет ли работать Oath2.0 для этого, или Oath2.0 используется только для прямой аутентификации между телефоном и службами Google?

  • 1
    C2DM устарела в пользу Google Cloud Messaging. Смотрите мой связанный вопрос GCM .
Теги:
authentication
google-cloud-messaging
android-c2dm

2 ответа

2
Лучший ответ

Вы не указали, какой код языка вы собираетесь использовать на своем сервере.

Более простой способ использования C2DM находится в Google App Engine, который поставляется с встроенной поддержкой интеграции Android с C2DM.

Если это не так (EX: youre using php на вашем собственном сервере), я бы посмотрел на AccountManager, который может предоставить вам токен аутентификации (пользователь должен его разрешить).

При регистрации нового устройства на ваш C2DM-сервер вам потребуется устройство для обмена также токеном, чтобы вы могли узнать, действительно ли пользователь является владельцем этой учетной записи gmail через соединение между вашим сервером и серверами Google.

:)

  • 1
    Я не понимаю, насколько важен язык реализации - вопрос в технологии и протоколе, не так ли? Из того, что я могу сказать, C2DM не предоставляет механизма аутентификации для учетных записей Google.
0

Я думаю, вы, должно быть, получили ответ на ваш запрос. Но я все же хотел бы ответить на этот вопрос, чтобы помочь другим пользователям, которые заинтересованы в достижении чего-то подобного.

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

  1. Создайте проект в Google Cloud Console с двумя компонентами (создайте компоненты, нажав "API" $ Auth> Credetials "на левой панели). Первым компонентом будет ваш веб-компонент (например, веб-службы), а второй компонент - ваше приложение для Android.
  2. Попробуйте получить токен доступа, запросив менеджер учетных записей в приложении Android, выполнив метод GoogleAuthUtil.getToken(), передав текущий контекст, идентификатор электронной почты (запрошенный с помощью диспетчера учетных записей) и область действия как ("аудитория: сервер: клиент_ид:").
  3. Где находится параметр "Идентификатор клиента" веб-компонента, доступный в рамках проекта, созданного на Google Cloud Console.
  4. Метод вернет вам токен ID, закодированный как веб-маркер JSON или JWT.
  5. Этот идентификатор идентифицирует все, что потребует приложение для аутентификации пользователя на сервере.
  6. Идентификатор ID состоит из следующих параметров:

iss: always accounts.google.com

Ауд: идентификатор клиента веб-компонента проекта

azp: идентификатор клиента компонента приложения Android для проекта

email: электронное письмо, которое идентифицирует пользователя, запрашивающего токен, вместе с некоторыми другими полями.

  1. Передайте этот токен вашему веб-компоненту (например, веб-сервисам) через https (обязательно), где уже сохранены веб-компонент и идентификатор клиента компонента Android.

  2. После декодирования полученного токена JWT ID на сервере проверьте, равны ли параметры "aud" идентификатора клиента и идентификатора веб-компонента и, следовательно, аутентифицируют пользователя.

  3. Идентификатор пользователя можно получить, прочитав параметр электронной почты токена JWT ID, который указывает идентификатор электронной почты, предоставленный для доступа к токену идентификатора в приложении Android при выполнении метода GoogleAuthUtil.getToken().

Примечание. Идентификатор ID на Android можно извлечь, выполнив команду GoogleAuthUtil.getToken(), если это одно и то же приложение, указанное одним и тем же сертификатом, указанное при создании компонента Android в рамках проекта на Google Cloud Console.

Более подробную информацию можно найти на странице " https://developers.google.com/accounts/docs/CrossClientAuth "

Ещё вопросы

Сообщество Overcoder
Наверх
Меню