2014-02-26 4 views
0

Я хотел бы использовать oAuth для получения идентификатора пользователя и, желательно, ТОЛЬКО их идентификатора, а не его адреса электронной почты, имени или любой другой информации.oAuth 2.0 для идентификатора пользователя из учетной записи Google

В Android я знаю, как использовать API Google Play для получения токенов и может вызвать диалог, в котором пользователь предоставляет разрешение на доступ к запрошенным данным. Обычно я использую AccountManager, чтобы открыть диалоговое окно, позволяющее пользователю выбрать, какой адрес электронной почты использовать для учетной записи, которая будет авторизировать приложение. В этом смысле у меня уже есть доступ к их адресу электронной почты, хотя мне это действительно не нужно. Мне действительно нужен идентификатор учетной записи Google, связанной с этим адресом электронной почты. Я также не хочу использовать Google+, поскольку для этого требуется доступ к слишком большой личной информации.

Область я нашел ближе был:

https://www.googleapis.com/auth/userinfo.email 

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

Есть ли область, которую я могу вызвать, которая извлекает только идентификатор учетной записи пользователя?

EDIT: Видимо я не только один обозленный об этом: http://www.club4850.com/?p=46970

Поэтому компания, как WhatsApp стал успешным. Они не требуют регистрации или доступа к какой-либо информации о пользователе. Значок Google отображает запрашиваемое разрешение «Знайте, кто вы на Google» - отличный способ потерять много пользователей.

+0

Что вы имеете в виду счета ID и как это отличается от их адреса электронной почты? – ianhanniballake

+0

Идентификатор учетной записи - это обычно число, хотя это может быть длинная строка. Обычно это никогда не раскрывается приложениям. Сначала приложение будет извлекать токен, который затем отправляется на мой сервер, который затем использует его для извлечения идентификатора пользователя, который будет сохранен. – AndroidDev

ответ

1

Выполнение дополнительных исследований, есть решение. Однако это требует разрешения пользователю разглашать свой адрес электронной почты. Решение называется Cross Client Идентичность:

https://developers.google.com/accounts/docs/CrossClientAuth Verifying Back-End Calls from Android Apps

В основном это работает так:

  1. В вашем приложении, вы всплывал диалог AccountManager, который представляет пользователю список зарегистрированных адреса электронной почты на своем устройстве. ПРИМЕЧАНИЕ. Эти адреса уже были подтверждены Google, когда пользователь добавил электронное письмо на свое устройство, поэтому у кого-то нет доступа к любому адресу электронной почты. Они могут выбирать только те, которые были установлены с устройством и проверены компанией Google.
  2. Затем вы звоните GoogleAuthUtil.getToken с областью аудитории: сервер: client_id: ххх, где ххх это идентификатор клиента, который вы жёстко в ваше приложение, которое извлекается из Google API консоли для приложения.
  3. Токен возвращается в формате JSON Web Token (JWT), который затем отправляется на сервер, где вы его декодируете, используя библиотеку JWT (доступную в Интернете). На этом этапе у вас есть идентификатор пользователя и адрес электронной почты. Вы должны проверить маркер, отправив его в Google, чтобы убедиться, что они его выпустили, и убедитесь, что идентификатор клиента в токене совпадает с идентификатором клиента в вашем проекте консоли Google API.

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

Здесь также онлайн-инструмент, который может декодировать JWT маркеры, которые можно использовать в процессе разработки, чтобы быстро увидеть, что данные маркер содержит:

Decode JWT token

Смежные вопросы