API задач аутентификации Google API - PullRequest
0 голосов
/ 14 декабря 2018

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

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

Насколько я понимаю, поскольку моя лямбда делает запрос от имени пользователя (в этом случае это всегда будет я), кажется, что все в документах указывает на необходимость использовать OAuth2.0 для аутентификации, котораяимеет смысл, поскольку вы хотите, чтобы разрешение пользователя вносило изменения в его учетную запись.Однако, поскольку я хочу сделать это только для своей учетной записи, я хотел знать, есть ли способ просто авторизовать мою учетную запись без выполнения OAuth-потока, который, как я полагаю, невозможен из лямбды, поскольку я не буду отвечать на запросы.это каждый раз, когда он работает.

Как я могу аутентифицировать свое приложение, чтобы я мог выполнять вызовы API задач и проходить аутентификацию в моей учетной записи?

1 Ответ

0 голосов
/ 15 декабря 2018

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

Авторизация и согласие

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

  2. Вам не нужно будет повторно авторизоваться, как только выдал согласие.Этот общий принцип применим к другим сторонам, использующим OAuth, если уровень согласия не изменится (пример: приложение начинает запрашивать разрешения на запись в дополнение к ранее разрешенному чтению), вы не получите повторного запроса.Если уровни разрешений изменятся, вы получите повторный запрос.

Теперь - вторая часть - как вы его создаете?

Google объясняет это вподробно здесь - но я еще упросту, потому что вам не нужно настраивать веб-сервер для вашего дела, вы делаете это только для себя.

Наша цель - только получитьВы начальный токен обновления.Получив токен обновления, вы можете использовать его из Lambda для получения нового токена доступа + обновления при каждом обращении к API задач.Вам просто нужно где-то хранить токен обновления, чтобы вы могли постоянно получать доступ к API задач.Вы просто хотите получить токен доступа + обновления.

  1. Перейдите на https://console.developers.google.com и создайте новое приложение.

  2. После создания нажмите « Включить API».и службы 'и найдите API задач .

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

  4. Вы также должны выбрать Данные пользователя / Информация , а не Данные / Информация приложения длятипы данных, к которым вы хотите получить доступ.Приложение обычно используется для GSuite.

  5. Установите URI перенаправления на http://localhost:8080 - Это то место, где вам обычно требуется веб-сервер но мы просто перенаправим обратно на ваш компьютер и получим параметр отсюда.Очевидно, что он не найдет веб-сервер, но нужный нам параметр находится в URL, мы просто скопируем его.

  6. Теперь перейдем к части аутентификации.URL-адрес аутентификации Google: https://accounts.google.com/o/oauth2/v2/auth

    Мы добавим параметры к этому URL-адресу

    • access_type = offline //, чтобы приложение-демон могло получить к нему доступ в автономном режиме
    • response_type = code // требуется, если у вас есть access_type = offline
    • scope = https://www.googleapis.com/auth/tasks // к чему вы хотите получить доступ
    • redirect_uri = http://localhost:8080 // куда бы гугл отправил код
    • client_id =

    , чтобы все это выглядело как https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&scope=https://www.googleapis.com/auth/tasks&redirect_uri=http://localhost:8080&client_id=

    Перейдите по этому URL, и вы должны получитьзапрашивается согласиеСогласие на это, и Google должен перенаправить вас на http://localhost:8080/?code= Нам понадобится этот код.Это нужно отправить в Google, чтобы получить токен доступа + обновления.

  7. Обмен кодами: отправьте запрос в Google.Вы можете использовать PostMan.Опять же, обычно все это автоматически обрабатывается веб-сервером (определение параметра кода, выполнение запроса на публикацию и т. Д.), Но нам просто нужен токен обновления, чтобы мы могли вставить его в наше Lambda-приложение.

POST до:

https://www.googleapis.com/oauth2/v4/token

с параметрами:

code=<the code you've retrieved>
client_id=<your_client_id>&
client_secret=<your_client_secret>&
redirect_uri=http://localhost:8080&
grant_type=authorization_code

Google должен вернуть вам токен доступа и токен обновления.С этого момента вам нужно сохранить токен обновления в вашем приложении Lambda - и если он запускается по расписанию при каждой загрузке:

  1. Прочитать токен обновления
  2. Позвонить в Google дляновый токен обновления + токен доступа
  3. Сохраните новый токен обновления.
  4. Используйте токен доступа для доступа к API задач.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...