Как автоматизировать вход в Google API для получения токена OAuth 2.0 для доступа к учетной записи известного пользователя - PullRequest
18 голосов
/ 21 марта 2012

Хорошо, значит, этот вопрос задавался раньше здесь . В ответе / ответе на вопрос пользователь говорит ему сохранить refresh_token в приложении (сеанс, а не дБ, хотя не имеет значения, где вы его храните). После просмотра документации в Google кажется, что у access_token есть срок действия, после которого он больше не действителен. Теперь мы, очевидно, можем автоматически обновлять токен каждый фиксированный интервал или если служба возвращает недопустимую ошибку токена, тем самым продлевая срок службы токена, но по какой-то причине этот ручной процесс выглядит немного хакерским. Мои вопросы:

  • Является ли это наиболее эффективным (/ общепринятым) способом доступа к календарю / данным приложения Google для известной учетной записи пользователя, если вручную войти в систему и сохранить токен в приложении? Или есть другой механизм, который позволяет нам программно входить в эту учетную запись пользователя и выполнять шаги OAuth?

1 Ответ

26 голосов
/ 25 марта 2012

В моем приложении поток выглядит так:

  1. Если access_token не определено, перенаправьте пользователя на страницу Google, где он предоставляет доступ к вашему приложению, получая доступ к своим данным Google. Это возвращает код авторизации вашему приложению.
  2. Используйте код авторизации, чтобы получить access_token и refresh_token. Вам также следует сохранить возвращенное значение expires_in, которое сообщает вам, когда истекает срок действия access_token и больше не может использоваться.
  3. Всякий раз, когда вам нужно получить доступ к API, вы можете проверить свою БД, если срок действия access_token истек - если это так, используйте refresh_token, чтобы получить новый access_token до доступа к API.

Я не сталкивался с какими-либо проблемами, делая это таким образом - что касается пользователя, ему нужно предоставить доступ только один раз, а затем приложение позаботится об аутентификации.

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

...