Автономный доступ к Google OAuth 2.0

Моему приложению требуется доступ к данным пользователя, даже если его нет. Таким образом, мой запрос на код авторизации включает access_type=offline, что означает, что я верну токен обновления, если это первый раз, когда пользователь аутентифицирует мое приложение. Я сохраняю токен обновления и использую его позже.

Все работает как положено и неплохо. Но что меня беспокоит, так это заявление в документации:

Обратите внимание, что существуют ограничения на количество выпускаемых токенов обновления; один лимит на комбинацию клиент / пользователь, и еще один на использование для всех клиентов. Вы должны сохранить токены обновления в долгосрочном хранилище и продолжать использовать их, пока они остаются действительными. Если ваше приложение запрашивает слишком много токенов обновления, оно может выйти за эти ограничения, и в этом случае старые токены обновления перестанут работать.

Если я правильно понимаю, возможно, сохраненный мной токен обновления станет недействительным, если пользователь авторизует слишком много приложений ?! Это верно? Как приложение должно реагировать в таких ситуациях? Запросить еще один токен обновления?

Заранее спасибо.


РЕДАКТИРОВАТЬ: Я создал тестовый PHP-скрипт, который будет запрашивать токены обновления от 4-х клиентов Google (под клиентом я имею в виду сгенерированные учетные данные в консоли Dev). Три из них связаны с одним адресом Gmail, а четвертый - с другим. Для первого письма я создал 2 проекта, а для первого - 2 идентификатора клиентов. Так:

  1. электронная почта X, проект A, идентификатор клиента abc
  2. электронная почта X, проект A, идентификатор клиента def
  3. электронная почта X, проект B, идентификатор клиента mno
  4. электронная почта Y, проект C, идентификатор клиента xyz

Я начал тест с запроса токена обновления для каждого клиента. Затем я запросил еще 24 токена обновления для первого идентификатора клиента abc. На этом этапе все токены обновления были действительны, хотя для электронной почты X у меня было 27 токенов обновления. Затем, когда я запросил еще один токен обновления для клиента с идентификатором abc, первый токен для этого клиента стал недействительным, поэтому достигнуто ограничение в 25 токенов на комбинацию электронной почты / клиента. Все остальные токены были по-прежнему действительны, и мне удалось сгенерировать новые токены для клиента def. Этот клиент предназначен для того же проекта A и того же адреса электронной почты X. Так что я не могу выйти на второй предел. Что означают эти утверждения, для меня до сих пор остается загадкой:

https://developers.google.com/accounts/docs/OAuth2#expiration.

Если вам необходимо авторизовать несколько программ, машин или устройств, можно решить проблему, чтобы ограничить количество клиентов, которые вы авторизуете для каждой учетной записи пользователя, до 15 или 20. Если вы являетесь администратором Google Apps, вы можете создать дополнительных пользователей-администраторов и использовать их. для авторизации некоторых клиентов.

https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

Обратите внимание, что существуют ограничения на количество выпускаемых токенов обновления; одно ограничение на комбинацию клиент / пользователь и другое ограничение на пользователя для всех клиентов.


person Martin Dimitrov    schedule 09.04.2014    source источник
comment
Я получил ответ от одного из разработчиков Google: я не уверен, каков лимит для каждого пользователя во всех клиентах, но я не слышал, чтобы кто-то достигал этого раньше. если я узнаю, я дам тебе знать. Так что мы все еще ждем официальной информации о том, что это значит.   -  person DaImTo    schedule 16.04.2014
comment
@DaImTo Спасибо. Я и сам не могу выйти за пределы других ограничений. Но всегда лучше знать наверняка. Спасибо еще раз.   -  person Martin Dimitrov    schedule 16.04.2014


Ответы (1)


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

Я столкнулся с этой проблемой с диспетчером подключений SSIS, если у пользователя мой диспетчер подключений работал с более чем 20 пакетами SSIS, первый из установленных перестанет работать.

https://developers.google.com/accounts/docs/OAuth2#expiration.

Token expiration

You should write your code to anticipate the possibility that a granted token might
no longer work. 
A token might stop working for one of these reasons:
  • Пользователь отозвал доступ.
  • Токен не использовался полгода.
  • Учетная запись пользователя превысила определенное количество запросов токенов.

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

Если вам необходимо авторизовать несколько программ, машин или устройств, можно решить проблему, чтобы ограничить количество клиентов, которые вы авторизуете для каждой учетной записи пользователя, до 15 или 20. Если вы являетесь администратором Google Apps, вы можете создать дополнительных пользователей-администраторов и использовать их. для авторизации некоторых клиентов.

Итак, пока ваше приложение не устанавливается более 15 раз одним и тем же пользователем, у вас не должно возникнуть проблем. Если это проблема, вы можете предложить им использовать другой / выделенный логин для вашего приложения.

person DaImTo    schedule 09.04.2014
comment
Спасибо. Но говорят ли они о токенах доступа или обновлении? Также я не понимаю этого ограничения в 25 токенов. Скажем, пользователь [email protected] авторизует мое приложение, а затем авторизует еще 25 приложений. Будет ли токен обновления, предоставленный моему приложению (самому старому), недействителен? - person Martin Dimitrov; 09.04.2014
comment
Они говорят о токене обновления. Помните, что токен доступа действителен только в течение 1 часа. Вы используете токен обновления, чтобы получить новый. Вы можете получать новые токены доступа сколь угодно часто, используя токен обновления. (кстати, вы правы, токен Grant немного сбивает с толку, я отправлю Google сообщение об этом) - person DaImTo; 09.04.2014
comment
Если пользователь [email protected] авторизует ВАШЕ ПРИЛОЖЕНИЕ 15-20 раз, ПЕРВЫЙ токен обновления, который он имел с вашим приложением, больше не будет работать. Это ваше приложение, а не чужое приложение. - person DaImTo; 09.04.2014
comment
Это первое ограничение one limit per client/user combination. Но посмотрите, что говорит второй: _2 _?!?! Как мне это прочитать? - person Martin Dimitrov; 09.04.2014
comment
Хороший вопрос! Я понятия не имею, что они имели в виду под этим заявлением. Но я знаю, у кого спросить. Я вернусь к вам по этому поводу. - person DaImTo; 09.04.2014
comment
Вот предположение, которое я тестирую, вы можете создать более одного идентификатора клиента для своего приложения. Я думаю, они имеют в виду идентификаторы других клиентов, которые вы, возможно, создали. Таким образом, если у вас есть идентификатор клиента для вашего веб-приложения и еще один для мобильного устройства, они по-прежнему считаются одним и тем же клиентом, и оба считаются одним и тем же максимумом 15-20. Создание мини-приложения для тестирования - person DaImTo; 09.04.2014
comment
Я сделал тест скрипта PHP. Пожалуйста, смотрите результаты в обновленном вопросе. Спасибо. - person Martin Dimitrov; 11.04.2014
comment
Я отправил вопрос в Google, надеясь, что кто-нибудь сможет прояснить, что они имеют в виду под этим заявлением. Я еще ничего не слышал. Если я это сделаю, я дам тебе знать - person DaImTo; 11.04.2014