Я пробую простой код api листов Google, сделанный в JAVA, и запускаю его из функции AWS Lambda, и у меня возникает ошибка тайм-аута, подобная этой
2018-04-20 01:55:01.573:INFO::Started SocketConnector@localhost:35315 Please open the following address in your browser:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=523391452358-5o611gt4igv3nik2blim3kr3q2m690sl.apps.googleusercontent.com&redirect_uri=http://localhost:35315/Callback&response_type=code&scope=https://www.googleapis.com/auth/spreadsheets.readonly END RequestId: d495a239-443d-11e8-9619-bd212b7bbf47 REPORT RequestId: d495a239-443d-11e8-9619-bd212b7bbf47 Duration: 60046.56 ms Billed Duration: 60000 ms Memory Size: 128 MB Max Memory Used: 48 MB
2018-04-20T01:55:58.627Z d495a239-443d-11e8-9619-bd212b7bbf47 Task timed out after 60.05 seconds
Похоже, что Google SDK хочет открыть браузер для аутентификации пользователя, но в AWS Lambda нет браузера. Есть ли другой способ аутентификации без открытия браузера? Если я использую https://developers.google.com/identity/protocols/OAuth2ServiceAccount#jwt-auth, он будет работать? У кого-нибудь есть полезные ссылки / образцы, которые я могу использовать? Я не опытный программист, очень ценю вашу помощь, заранее спасибо.
Вы должны иметь возможность использовать ключ API для вызова API Google Таблиц без токена OAuth (если вы не получаете доступ к личным данным профиля пользователя).
@Tanaike В моем случае пользователь вызывает API, используя один идентификатор клиента и секрет.
@Ashan, на самом деле то, что я пытаюсь сделать, пользователь из моего веб-приложения сгенерирует отчет, затем они могут щелкнуть «экспорт в лист Google», который вызовет шлюз AWS API, затем лямбда-функция AWS будет экспортировать отчеты в GSheet, для пользователей, у которых есть учетная запись Google, они должны войти в систему и разрешить доступ. У вас есть какие-либо предложения?
В этом потоке вы можете получить токен из внешнего интерфейса, инициировать поток OAuth и использовать этот токен для отправки на шлюз API для выполнения действия Google API. Это будет не лучший пользовательский опыт, но я считаю, что это рабочий процесс.
Привет, @Ashan, спасибо за предложение. Не могли бы вы объяснить немного больше
Я не мог понять ситуацию. Количество пользователей только одно? Прошу прощения за мои плохие знания английского языка.
@Tanaike более 1 пользователя, на самом деле я тоже не уверен, правильно ли я вам отвечу. Я новичок в этом: '|
В вашей ситуации несколько пользователей используют сервер, используя идентификатор клиента и секрет клиента каждого пользователя. В этом случае электронная таблица находится на Google Диске каждого пользователя. Каждый пользователь создает или обновляет собственную таблицу. Если я правильно понимаю, авторизация требуется для использования API для каждого пользователя Google, использующего каждый браузер, из-за использования метода POST. И может потребоваться изменить объем https://www.googleapis.com/auth/spreadsheets.readonly. Если таблица находится на Google Диске владельца. Авторизация должна быть сделана только владельцем.
Когда пользователь нажимает на отчет, он будет перенаправлен на вход в Google (только один раз) для авторизации этого приложения, а затем вы получите токены, которые могут быть отправлены на серверную часть для создания документа Google / изменения и т. д.
Спасибо большое, ребята, попробую и обновлю здесь :)
Привет @Ashan, знаете ли вы, как передать токен, полученный с URL-адреса, для отправки запроса POST на сервер Google для получения учетных данных пользователя?





Вы можете использовать ключ учетная запись службы, чтобы избежать использования браузера.
A service account is a special type of Google account intended to represent a non-human user that needs to authenticate and be authorized to access data in Google APIs.
У меня вопрос. В вашей ситуации каждый пользователь вызывает API, используя идентификатор клиента и секрет каждого пользователя? Или каждый пользователь или пользователь вызывает API, используя один идентификатор клиента и секрет?