Ответ 1
Чтобы ответить на ваш вопрос о потоке "Установленная заявка":
Код авторизации действителен только один раз. После того, как вы обменяли его - и получили токен обновления и токен доступа - он больше не будет использоваться. Просто сбросьте это. Это одноразовое использование, и вам это больше не нужно. Вам нужно просто сохранить/сохранить/перенести токен обновления в некоторый локальный файл для повторного использования.
Токен обновления - важный токен. Он дает вам доступ к API в течение неограниченного периода времени, потому что вы можете использовать его для программного получения новых токенов доступа (которые действительны в течение 1 часа). Проверьте обновление токена документа.
Библиотеки клиентов API API обычно обрабатывают токены автоматически и прозрачно для вас, но поскольку у нас нет клиентской библиотеки C++, вам нужно сделать это самостоятельно. Один из методов, который мы используем, заключается в том, что мы улавливаем 403 ошибки при выполнении запросов к API (что указывает на недействительный токен доступа), в этом случае мы обновляем, чтобы получить новый токен доступа, а затем автоматически повторите попытку, которая была неудачной изначально.
Мой совет:
Поток, который даст вам наилучший опыт пользователя, - это использовать поток веб-приложений на стороне сервера. Его можно использовать в установленном и/или командной строке, хотя это больше работает. Вот как это сделать:
- Запустите локальный веб-сервер на компьютере пользователя, который прослушивает свободный порт (например:
http://127.0.0.1:7777
) - Создайте окно веб-браузера (или вставьте его в приложение), перенаправляя пользователя на страницу предоставления гранта Google OAuth 2.0 и настройте URI перенаправления на
http://127.0.0.1:7777
- Когда пользователь предоставляет доступ к приложению, он перенаправляется на ваш сервер, прослушивая
http://127.0.0.1:7777
. - На вашем локальном веб-сервере вы получите код авторизации, указанный в параметре URL-запроса. Теперь вы можете обменять код авторизации для доступа и обновления токенов, которые вы сохраняете
- Убейте/закройте локальный веб-сервер, запущенный на шаге 1
- Убейте/закройте экземпляр браузера, который вы породили на шаге 2
Теперь у вас есть обновление и токены доступа (с шага 4), и вы вернулись в свое приложение после убийства браузера.
Почему весь этот беспорядок?
Логин клиента устарел. Он уходит и не работает с новыми API. Google не хочет, чтобы пользователи предоставляли вам свой пароль, поскольку у вас может возникнуть соблазн сохранить его, и вы можете получить взломанный :)) Кроме того, он дает вам доступ к слишком большой информации, поскольку вы можете покупать вещи с помощью своей учетной записи Google Checkout или измените свой пароль, чтобы украсть их учетные записи. В настоящее время единственным способом перейти на точку безопасности является использование этих трехъядерных систем auth, таких как OAuth2, и препятствовать использованию паролей, чтобы пользователи не привыкли предоставлять свое имя пользователя и пароль третьим сторонам. Конечно, OAuth2 намного сложнее использовать для настольных/командных приложений...
Альтернатива OOB
Если вы не хотите или не можете запустить веб-сервер для прослушивания кода, вы можете использовать поток oob
OAuth. Он работает, просто указывая oob
как URI перенаправления. В этом случае вместо того, чтобы перенаправляться на заданный URL-адрес, пользователю будет показана страница с надписью "Вот ваш код аутентификации. Скопируйте его в свое приложение". В приложении вы можете просто вставить свой код в текстовое поле и вуаля. Это худший пользовательский опыт, но в некоторых случаях он может быть более устойчивым и работать в большей среде, особенно в низкотехнологичных средах.
Остерегайтесь, поскольку не все поставщики OAuth 2 поддерживают это, но, по крайней мере, делают Google и Facebook.