Проверка подписи запроса веб-перехватчика для API Google Conversation v3
При создании диалогового действия с помощью нового пакета SDK действий или конструктора действий вы можете определить веб-перехватчик для обработки бизнес-логики. Затем этот веб-перехватчик получает запросы выполнения, среди прочего, со следующими заголовками:
Google-Actions-API-Version: "3"
Google-Assistant-Signature: "eyJhbGciOiJSUzI1NiIsImtpZC..."
Как следует проверить эту подпись? Это JWT требование, но ключ ID, с которым он был подписан не существует в GCP счета, связанные с действием, и не упоминается в новых действиях SDK документации или в Node.js совершение библиотечной документации.
1 ответ
Подпись представляет собой веб-токен JSON, который представляет собой закодированный способ передачи некоторых утверждений, которые были подписаны проверяемым способом. Существуют библиотеки, которые будут декодировать и проверять JWT. Общие шаги (некоторые из которых можно кэшировать или использовать ярлыки):
- Расшифруйте заголовок, чтобы получить
kid
(идентификатор ключа) и полезную нагрузку для полученияiss
(эмитент) поля. Вам также понадобитсяnbf
(не раньше) иexp
(срок действия), чтобы убедиться, что это было недавно установлено иaud
поле, чтобы убедиться, что он соответствует вашему идентификатору проекта Google Cloud. - В зависимости от эмитента, получите доступ к хорошо известной конфигурации openid. Поскольку эмитент - https://accounts.google.com, вы можете получить к нему доступ по адресу https://accounts.google.com/.well-known/openid-configuration.
- Из документа конфигурации вы хотите, чтобы
jwks_uri
поле, которое является URL-адресом для получения текущих сертификатов JWT. Для Google это, вероятно, https://www.googleapis.com/oauth2/v3/certs. - Документ сертификата должен содержать массив ключей. Вам нужен ключ с
kid
что соответствуетkid
из JWT. Обратите внимание, что эти клавиши меняются часто, но пока вы находитесь в окнеnbf
а такжеexp
поля из заголовка подписи, ключ должен существовать в документе сертификата. - После этого вы можете проверить подпись JWT.