Подтвердить что ты не робот

Авторизация средства командной строки для использования API Google (через OAuth2.0 или что-либо еще)

Думаю, я понимаю, как работает OAuth 2.0 в контексте мобильного приложения или веб-сайта - и это не мое дело.

У меня есть приложение командной строки С++ , которое я хочу предоставить одному из сервисов Google (Таблицы Google Fusion), но я думаю, что этот вопрос относится к любому из сервисов Google, или, возможно, к любому приложению командной строки, которое должно иметь дело с OAuth2.

У меня есть имя пользователя. У меня есть пароль (пользователь набрал его). Мне нужно получить токен, чтобы я мог совершать вызовы через Curl. Каков самый простой способ сделать это?

Обновление 1:

После прохождения документации кажется, что наименее болезненный поток OAuth2 будет "Установленное приложение" .

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

Всякий раз, когда моему инструменту командной строки нужно будет использовать частный ресурс, этот пользователь должен будет предоставить предоставленный Google код авторизации (который мой инструмент командной строки может затем использовать для получения полезного токена). Если пользователь не предоставил код авторизации в командной строке, мой инструмент просто напечатает ссылку, которую пользователь может вставить в URL-адрес для создания кода авторизации. Ссылка будет выглядеть так:

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/fusiontables&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

Как только пользователь примет, она должна будет вставить этот код авторизации на терминал, чтобы он мог использоваться инструментом командной строки. Инструмент командной строки будет использовать код авторизации, чтобы попросить Google использовать токен, а затем, наконец, я смогу использовать токен Google, чтобы вызвать вызовы API.

Мне все еще не ясно. Изменен ли код авторизации? Если это так, мне кажется, мне нужно будет сохранить токены и обновить токены где-нибудь, чтобы я мог повторно использовать токен обновления каждый раз, когда токен истекает.

Это только я, или все это кажется сумасшедшим, так что я могу использовать API Google из командной строки?

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

4b9b3361

Ответ 1

Чтобы ответить на ваш вопрос о потоке "Установленная заявка":

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

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

Библиотеки клиентов API API обычно обрабатывают токены автоматически и прозрачно для вас, но поскольку у нас нет клиентской библиотеки C++, вам нужно сделать это самостоятельно. Один из методов, который мы используем, заключается в том, что мы улавливаем 403 ошибки при выполнении запросов к API (что указывает на недействительный токен доступа), в этом случае мы обновляем, чтобы получить новый токен доступа, а затем автоматически повторите попытку, которая была неудачной изначально.

Мой совет:

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

  1. Запустите локальный веб-сервер на компьютере пользователя, который прослушивает свободный порт (например: http://127.0.0.1:7777)
  2. Создайте окно веб-браузера (или вставьте его в приложение), перенаправляя пользователя на страницу предоставления гранта Google OAuth 2.0 и настройте URI перенаправления на http://127.0.0.1:7777
  3. Когда пользователь предоставляет доступ к приложению, он перенаправляется на ваш сервер, прослушивая http://127.0.0.1:7777.
  4. На вашем локальном веб-сервере вы получите код авторизации, указанный в параметре URL-запроса. Теперь вы можете обменять код авторизации для доступа и обновления токенов, которые вы сохраняете
  5. Убейте/закройте локальный веб-сервер, запущенный на шаге 1
  6. Убейте/закройте экземпляр браузера, который вы породили на шаге 2

Теперь у вас есть обновление и токены доступа (с шага 4), и вы вернулись в свое приложение после убийства браузера.

Почему весь этот беспорядок?

Логин клиента устарел. Он уходит и не работает с новыми API. Google не хочет, чтобы пользователи предоставляли вам свой пароль, поскольку у вас может возникнуть соблазн сохранить его, и вы можете получить взломанный :)) Кроме того, он дает вам доступ к слишком большой информации, поскольку вы можете покупать вещи с помощью своей учетной записи Google Checkout или измените свой пароль, чтобы украсть их учетные записи. В настоящее время единственным способом перейти на точку безопасности является использование этих трехъядерных систем auth, таких как OAuth2, и препятствовать использованию паролей, чтобы пользователи не привыкли предоставлять свое имя пользователя и пароль третьим сторонам. Конечно, OAuth2 намного сложнее использовать для настольных/командных приложений...

Альтернатива OOB

Если вы не хотите или не можете запустить веб-сервер для прослушивания кода, вы можете использовать поток oob OAuth. Он работает, просто указывая oob как URI перенаправления. В этом случае вместо того, чтобы перенаправляться на заданный URL-адрес, пользователю будет показана страница с надписью "Вот ваш код аутентификации. Скопируйте его в свое приложение". В приложении вы можете просто вставить свой код в текстовое поле и вуаля. Это худший пользовательский опыт, но в некоторых случаях он может быть более устойчивым и работать в большей среде, особенно в низкотехнологичных средах.

Остерегайтесь, поскольку не все поставщики OAuth 2 поддерживают это, но, по крайней мере, делают Google и Facebook.