API задач аутентификации Google API
Я хочу создать лямбда-функцию, которая использует API задач Google для добавления задач каждый вечер в определенное время.
Я не уверен, как проходить аутентификацию с моей учетной записью и иметь возможность безопасно хранить токены / учетные данные доступа в переменных лямбда-окружения.
Насколько я понимаю, поскольку моя лямбда выполняет запрос от имени пользователя (в этом случае это всегда будет я), кажется, что все в документах указывает на необходимость использовать OAuth2.0 для аутентификации, что имеет смысл, поскольку вы хотите разрешение пользователя вносить изменения в свою учетную запись. Однако, поскольку я хочу сделать это только для своей учетной записи, я хотел знать, есть ли способ просто авторизовать мою учетную запись без выполнения OAuth-потока, который, как я полагаю, невозможен из лямбды, поскольку я не буду отвечать на запросы. это каждый раз, когда он работает.
Как я могу аутентифицировать свое приложение, чтобы я мог выполнять вызовы API задач и проходить аутентификацию в моей учетной записи?
1 ответ
Это на удивление больше работы, чем я себе представлял, и, к сожалению, Google не генерирует токены разработчика, которые могли бы решить большую часть этой проблемы.
Авторизация и согласие
Не существует немедленных способов авторизации вашей учетной записи для созданного вами приложения без прохождения процедуры согласия. Некоторые поставщики облачных услуг генерируют маркер разработчика для тестирования вашего приложения с вашими учетными данными, но Google, похоже, не имеет этой функции. В любом случае, не для API задач. AdWords API говорит о маркере разработчика, но я не уверен, что это та же концепция.
Вам не нужно будет повторно авторизоваться после получения согласия. Этот общий принцип применим к другим сторонам, использующим OAuth, если уровень согласия не изменится (пример: приложение начинает запрашивать разрешения на запись в дополнение к ранее разрешенному чтению), вы не получите повторного запроса. Если уровни разрешений изменятся, вы получите повторный запрос.
Теперь - вторая часть - как вы делаете один?
Google объясняет это подробно здесь - но я еще больше упросту, потому что вам не нужно настраивать веб-сервер для вашего случая, вы делаете это только для себя.
Наша цель - получить только первый токен обновления. Получив токен обновления, вы можете использовать его из Lambda для получения нового токена доступа + обновления при каждом обращении к API задач. Вам просто нужно где-то хранить токен обновления, чтобы вы могли постоянно получать доступ к API задач. Вы просто хотите получить токен доступа + обновления.
Перейдите на https://console.developers.google.com/ и создайте новое приложение.
После создания нажмите "Включить API и службы" и найдите Tasks API.
Продолжайте создавать учетные данные и убедитесь, что вы выбираете этот API-интерфейс с веб-сервера. Выбор браузера (JavaScript) даст вам только токен доступа, а не токен обновления, поскольку они будут доверять вам хранить токен обновления на вашем сервере, но не в браузере. Токен доступа ограничен (обычно) 60 минутами.
Вы также должны выбрать Данные пользователя / Информация, а не Данные приложения / Информация для типов данных, к которым вы хотите получить доступ. Приложение обычно используется для GSuite.
Установите для URI перенаправления http://localhost:8080/ - здесь обычно требуется веб-сервер, но мы просто перенаправим обратно на ваш компьютер и получим параметр здесь. Очевидно, он не найдет веб-сервер, но нужный нам параметр находится в URL, мы просто скопируем его.
Теперь здесь идет часть аутентификации. 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, чтобы получить токен доступа + обновления.
Обмен кодами: отправьте запрос в Google. Вы можете использовать PostMan. Опять же, обычно все это автоматически обрабатывается веб-сервером (определение параметра кода, выполнение запроса на публикацию и т. Д.), Но нам просто нужен токен обновления, чтобы мы могли вставить его в наше Lambda-приложение.
Опубликовать в:
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-приложении, и, если оно выполняется по расписанию при каждой загрузке:
- Прочитайте токен обновления
- Позвоните в Google, чтобы получить новый токен обновления + токен доступа
- Сохраните новый токен обновления.
- Используйте токен доступа для доступа к API задач.