Межклиентная авторизация между сервером и надстройкой Gmail

Фон:

Речь идет об использовании Gmail Addon, созданного с помощью Google App Script. Когда пользователь устанавливает надстройку, появляется экран согласия OAuth, где пользователь дает свое согласие на то, чтобы «Имя продукта, показываемое пользователям» (как настроено на экране OAuth), разрешило указанный доступ.

Теперь я прочитал: https://developers.google.com/identity/protocols/CrossClientAuth

в котором говорится:

Когда пользователь предоставляет доступ к вашему приложению для определенной области, он смотрит на экран согласия пользователя, который включает в себя брендинг продукта на уровне проекта, который вы настроили в консоли Google API. (Для получения информации о настройке экрана согласия см. Раздел Настройка OAuth 2.0 в справке консоли API.) Таким образом, Google считает, что, когда пользователь предоставил доступ к определенной области любому идентификатору клиента в проекте, грант указывает на пользователя доверять всему приложению для этой области.

Теперь у меня есть серверный веб-компонент (лямбда) (принадлежащий тому же продукту), которому требуется доступ к электронной почте пользователя, такой же доступ, который пользователь предоставил после установки надстройки (кнопка «Авторизованный доступ»).

Вопрос (ы):

Есть ли способ иметь кросс-клиент (бэкэнд-сервер и надстройку Gmail) в моем случае, чтобы бэкэнд просто получал доступ к данным пользователя, не вызывая дополнительных (в основном, на что пользователь дал согласие)?

Примечание. Используя дополнительный экран авторизации, запускаемый вручную с помощью библиотеки GAS OAuth, я смог получить «Код аутентификации», который я передаю на сервер, с помощью которого сервер теперь имеет доступ к согласованным данным (мы использовали тот же идентификатор клиента и секрет). Однако проблема с этим подходом заключается в следующем:

  • Пользователь получает 2 письма о предоставленных разрешениях. Аддон и поток, запускаемый вручную.
  • Пользователь должен авторизовать надстройки Gmail для первого доступа, а затем другого, который я запускаю вручную. Даже если бы я мог получить «Код авторизации», когда пользователь установит аддон, это тоже подойдет.

Заранее извиняюсь, есть много разрозненной документации, и хотя я просмотрел много, вероятно, я что-то пропустил.


person Curious Explorer    schedule 13.03.2018    source источник
comment
Я считаю, что вам нужно добавить оба сценария в один и тот же проект платформы Google Cloud.   -  person tehhowch    schedule 13.03.2018


Ответы (1)


Мы выдаем только один код авторизации (токен обновления) в обмен на авторизацию / одобрение одного пользователя. Ваше приложение может получать новые токены доступа на Android или в Интернете без согласия пользователя. Но если ему снова понадобится токен обновления, пользователю все равно нужно утвердить запрос. Поэтому, если надстройка может взаимодействовать с вашим сервером, вы можете дать ему кратковременный токен доступа или потребуется авторизация пользователя.

person nvnagr    schedule 14.03.2018