Как я авторизовываю приложение (сеть или установленный) без вмешательства пользователя?

Скажем, то, что у меня есть веб-приложение, которое должно получить доступ к файлам Диска в фоновом сервисе. Это будет или владеть файлами, к которым это получает доступ, или быть выполненным в Google Account, с которым владелец совместно использовал документы.

Я понимаю, что для моего приложения нужен маркер обновления, но я не хочу писать код для получения этого, так как я буду только когда-либо делать это однажды.

NB. Это НЕ использует Сервисную учетную запись. Приложение будет запущено в соответствии со стандартной учетной записью Google. Сервисная учетная запись является допустимым подходом в некоторых ситуациях. Однако метод использования Детской площадки OAuth для моделирования приложения может сохранить набор избыточного усилия и относится к любым API, для которых не поддерживается совместное использование к Сервисной учетной записи.

61
задан 27 January 2019 в 12:45

1 ответ

Позвольте мне добавить альтернативный маршрут к превосходному ответу pinoyyid (который не работал на меня - выталкивающий ошибки перенаправления).

Вместо того, чтобы использовать OAuthPlayground можно также использовать REST HTTP API непосредственно. Таким образом, различие к ответу pinoyyid - то, что мы сделаем вещи локально. Следуйте за шагами 1-3 от ответа pinoyyid. Я заключу им в кавычки:

  1. Создают Google Account (например, my.drive.app@gmail.com) - Или пропускают этот шаг, если Вы используете существующую учетную запись.
  2. Использование консоль API для регистрации mydriveapp ( https://console.developers.google.com/apis/credentials/oauthclient? project=mydriveapp или всего https://console.developers.google.com/apis / )
  3. Создают новый набор учетных данных (NB Клиентский идентификатор OAuth не Ключ Сервисной учетной записи, и затем выберите "Web Application" из выбора)

Теперь, вместо детской площадки, добавьте следующее к своим учетным данным:

Авторизованные Источники JavaScript: http://localhost (я не знаю, требуется ли это, но просто делает это.)
Авторизованное Перенаправление URIs: http://localhost:8080

Снимок экрана (на немецком языке):

OAuth source/redirect settings

Удостоверяются к [1 164], на самом деле сохраняют Ваши изменения через синюю кнопку ниже!

Теперь Вы, вероятно, захотите использовать GUI для создания Запросов HTTP. Я использовал Бессонница , но можно пойти с [1 125] Почтальон или простое ЗАВИХРЕНИЕ. Я рекомендую, чтобы Бессонница для него позволила Вам проходить экраны согласия легко.

Сборка новое ДОБИРАЮТСЯ запрос со следующими параметрами:

URL: https://accounts.google.com/o/oauth2/v2/auth
Query Param: redirect_uri=http://localhost:8080
Query Param: prompt=consent
Query Param: response_type=code
Query Param: client_id=<your client id from OAuth credentials>
Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.file>
Query Param: access_type=offline

, Если Ваш предпочтительный инструмент не обрабатывает URL, кодирующий автоволшебно, удостоверяются, что получили его правильный самостоятельно.

перед увольнением запроса, настраивает веб-сервер для слушания на http://localhost:8080. Если у Вас есть узел, и npm установил выполненный npm i express, то создайте index.js:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('ok');
  console.log(req)
});

app.listen(8080, function () {
  console.log('Listening on port 8080!');
});

И выполненный сервер через node index.js. Я рекомендую или не регистрирую целое req, объект или работать node index.js | less за полным выводом будет огромен.
существуют очень простые решения для других языков, также. Например, используйте PHP's, созданный в веб-сервере на 8 080 php -S localhost:8080.

Теперь запускают Ваш запрос (при Бессоннице), и Вам нужно предложить с входом в систему:

login prompt

Входят в систему с Вашей электронной почтой и паролем и подтверждают экран согласия (должен содержать Ваши выбранные объемы).

Возвращаются к Вашему терминалу и проверяют вывод. Если Вы зарегистрировались, все это прокручивает вниз (например, pgdown в меньше), пока Вы не видите строку с [1 111].

Копия тот код; именно Ваш код авторизации Вы захотите обмениваться для доступа и обновить маркер. Не копируйте слишком много - если существует амперсанд &, не копируют его или ничто после. & разграничивает параметры запроса. Мы просто хотим code.

Теперь настраивает запрос POST HTTP, указывающий https://www.googleapis.com/oauth2/v4/token как [1 130], URL формы закодировал . При Бессоннице можно просто нажать это - в других инструментах, Вам, возможно, придется установить заголовок самим на [1 116].

Добавляют следующие параметры:

code=<the authorization code from the last step>
client_id=<your client ID again>
client_secret=<your client secret from the OAuth credentials>
redirect_uri=http://localhost:8080
grant_type=authorization_code

Снова, удостоверьтесь, что кодирование корректно.

Огонь Ваш запрос и проверка вывод с Вашего сервера. В ответе необходимо видеть объект JSON:

{
  "access_token": "xxxx",
  "expires_in": 3600,
  "refresh_token": "1/xxxx",
  "scope": "https://www.googleapis.com/auth/drive.file",
  "token_type": "Bearer"
}

можно использовать access_token сразу же, но это только будет допустимо в течение одного часа. Отметьте маркер обновления. Это - то, которое Вы всегда можете* обмен для нового маркера доступа.

* необходимо будет повторить процедуру, если пользователь изменяет свой пароль, отклоняет доступ, неактивно в течение 6 месяцев и т.д.

Счастливый OAuthing!

3
ответ дан 31 October 2019 в 15:40