В этом разделе рассказывается, как проверить, что запросы к конечной точке приложений Google Chat, созданных на основе конечных точек HTTP, поступают из Chat.
Чтобы отправлять события взаимодействия в конечную точку приложения Chat, Google выполняет HTTPS-запросы к вашему сервису. Чтобы подтвердить, что запрос отправлен Google, Chat включает подписанный Google токен идентификатора OpenID Connect (OIDC) в качестве токена на предъявителя в заголовке Authorization каждого HTTPS-запроса (а также в поле authorizationEventObject.systemIdToken тела запроса). Пример:
POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite
Строка AbCdEf123456 в приведенном выше примере – это токен авторизации носителя. Этот криптографический токен подписывается уникальным аккаунтом сервиса для каждого проекта приложения Chat (service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com), а в поле audience задается URL конечной точки HTTP, настроенный для приложения Chat при его конфигурации.
Вы можете скопировать адрес электронной почты сервисного аккаунта приложения Chat из раздела Настройки подключения на вкладке Конфигурация API Chat в консоли Google Cloud:
В консоли Google Cloud нажмите Меню > API и сервисы > Включенные API и сервисы > Google Chat API > Конфигурация:
В разделе Интерактивные функции > Настройки подключения скопируйте адрес электронной почты сервисного аккаунта (
service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com).
Если вы реализовали приложение Chat с помощью функций Cloud Run или Cloud Run, Cloud IAM автоматически проверяет токены, когда вы предоставляете сервисному аккаунту приложения Chat роль Cloud Run Invoker (roles/run.invoker).
Если в вашем приложении реализован собственный HTTP-сервер, вы можете проверить токен носителя с помощью клиентской библиотеки API Google с открытым исходным кодом:
- Java: https://github.com/google/google-api-java-client.
- Python: https://github.com/google/google-api-python-client
- Node.js https://github.com/google/google-api-nodejs-client
- .NET: https://github.com/google/google-api-dotnet-client
Если токен не проходит проверку в приложении Chat, ваш сервис должен ответить на запрос кодом ответа HTTPS 401 (Unauthorized).
Как аутентифицировать запросы с помощью функций Cloud Run
Если логика функции реализована с помощью функций Cloud Run или Cloud Run, убедитесь, что URL конечных точек HTTP, настроенные в разделе Триггеры в настройках подключения приложения Chat, соответствуют URL конечной точки функции Cloud Run.
Затем авторизуйте сервисный аккаунт приложения Chat (service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com, скопированный из раздела Настройки подключения на вкладке Настройки Chat API) в качестве вызывающего объекта, выполнив следующие действия:
Консоль
После развертывания функции или сервиса в Google Cloud:
В консоли Google Cloud перейдите на страницу Cloud Run:
В списке сервисов Cloud Run установите флажок рядом с функцией получателя. (не нажимайте на саму функцию).
В верхней части экрана нажмите Разрешения. Откроется панель Разрешения.
Нажмите Добавить субъекта.
В поле Новые субъекты введите адрес электронной почты сервисного аккаунта приложения Chat (
service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com).В меню Выберите роль выберите роль Cloud Run.
Вызывающий Cloud Run.
Нажмите Сохранить.
gcloud
Используйте команду gcloud functions add-invoker-policy-binding:
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-gsuiteaddons.iam.gserviceaccount.com'Замените следующее:
RECEIVING_FUNCTION– название функции приложения Chat.PROJECT_NUMBER– номер проекта из адреса электронной почты сервисного аккаунта приложения Chat.
Как аутентифицировать HTTP-запросы с помощью токена идентификатора
Для конечных точек HTTP токен авторизации носителя в запросе представляет собой токен идентификатора OpenID Connect (OIDC), подписанный Google.
В поле email указан адрес электронной почты сервисного аккаунта приложения Chat (service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com), а в поле audience – URL конечной точки HTTP, настроенной для получения запроса. Например, если настроенная конечная точка приложения Chat – https://example.com/app/, то поле audience в токене идентификатора будет иметь значение https://example.com/app/.
Этот способ аутентификации рекомендуется, если конечная точка HTTP не размещена в сервисе, поддерживающем аутентификацию на основе IAM (например, Cloud Run).
В приведенных ниже примерах показано, как проверить, что токен на предъявителя был выпущен Google для вашего приложения Chat и предназначен для конечной точки вашего приложения, с помощью клиентской библиотеки Google OAuth:
Java
Python
Node.js
Статьи по теме
- Общие сведения об аутентификации и авторизации в Google Workspace можно найти в статье Аутентификация и авторизация.
- Общие сведения об аутентификации и авторизации в Chat приведены в статье Обзор аутентификации.
- Настройте аутентификацию и авторизацию с помощью учетных данных пользователя или сервисного аккаунта.
Приложения для Chat, которые не являются дополнениями: проверка запросов из Google Chat
Следующая документация относится к приложениям Chat, которые не являются дополнениями Google Workspace. Чтобы перенести приложение Chat, которое не является дополнением, ознакомьтесь со статьей Как преобразовать приложение Google Chat в дополнение Google Workspace.
Для приложений Chat, которые не являются дополнениями, настроенными с помощью URL конечной точки HTTP в разделе Настройки подключения, тип токена носителя и значение поля audience зависят от типа аудитории аутентификации, выбранного при настройке приложения Chat, а запросы подписываются общим сервисным аккаунтом chat@system.gserviceaccount.com.
Как аутентифицировать запросы с помощью функций Cloud Run (для приложений Chat, которые не являются дополнениями)
Если логика функции реализована с помощью функций Cloud Run, в поле Аудитория аутентификации настроек подключения приложения Chat необходимо выбрать URL конечной точки HTTP и убедиться, что URL конечной точки HTTP в конфигурации соответствует URL конечной точки функции Cloud Run.
Затем вам нужно авторизовать сервисный аккаунт Google Chat chat@system.gserviceaccount.com в качестве вызывающего объекта, выполнив следующие действия:
Консоль
После развертывания функции или сервиса в Google Cloud:
В консоли Google Cloud перейдите на страницу Cloud Run:
В списке сервисов Cloud Run установите флажок рядом с функцией получателя. (не нажимайте на саму функцию).
В верхней части экрана нажмите Разрешения. Откроется панель Разрешения.
Нажмите Добавить субъекта.
В поле Новые субъекты введите
chat@system.gserviceaccount.com.В меню Выберите роль выберите роль Cloud Run.
Вызывающий Cloud Run.
Нажмите Сохранить.
gcloud
Используйте команду gcloud functions add-invoker-policy-binding:
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:chat@system.gserviceaccount.com'Замените RECEIVING_FUNCTION названием функции приложения Chat.
Как аутентифицировать HTTP-запросы с помощью токена идентификатора (для приложений Chat, которые не являются дополнениями)
Если в поле Аудитория аутентификации настройки подключения приложения Chat, которое не является дополнением, задано значение URL конечной точки HTTP, токен авторизации носителя в запросе представляет собой токен идентификатора OpenID Connect (OIDC), подписанный Google.
В поле email задано значение chat@system.gserviceaccount.com. В поле Аудитория аутентификации указан URL, который вы настроили в Google Chat для отправки запросов в приложение для Chat, не являющееся дополнением. Например, если настроенная конечная точка приложения Chat – https://example.com/app/, то поле Аудитория аутентификации в токене идентификатора будет иметь значение https://example.com/app/.
В примерах ниже показано, как с помощью клиентской библиотеки Google OAuth проверить, что токен на предъявителя был выдан Google Chat и предназначен для вашего приложения Chat, которое не является дополнением.
Java
Python
Node.js
Аутентификация запросов с помощью JWT номера проекта (для приложений Chat, которые не являются дополнениями)
Если в поле Аудитория аутентификации настройки подключения приложения Chat, которое не является дополнением, задано значение Project
Number, то токен авторизации носителя в запросе представляет собой JSON Web Token (JWT) с самозаверяющей подписью, выпущенный и подписанный chat@system.gserviceaccount.com.
Поле audience содержит номер облачного проекта Google Cloud, который вы использовали для создания приложения Chat, не являющегося дополнением. Например, если номер облачного проекта для приложения Chat – 1234567890, то поле audience в JWT будет иметь значение 1234567890.
В приведенных ниже примерах показано, как проверить, что токен был выдан Google Chat и предназначен для вашего проекта, с помощью клиентской библиотеки Google OAuth.