Проверка подписи запроса веб-перехватчика для API Google Conversation v3

При создании диалогового действия с помощью нового пакета SDK действий или конструктора действий вы можете определить веб-перехватчик для обработки бизнес-логики. Затем этот веб-перехватчик получает запросы выполнения, среди прочего, со следующими заголовками:

Google-Actions-API-Version: "3"
Google-Assistant-Signature: "eyJhbGciOiJSUzI1NiIsImtpZC..."

Как следует проверить эту подпись? Это JWT требование, но ключ ID, с которым он был подписан не существует в GCP счета, связанные с действием, и не упоминается в новых действиях SDK документации или в Node.js совершение библиотечной документации.

1 ответ

Решение

Подпись представляет собой веб-токен JSON, который представляет собой закодированный способ передачи некоторых утверждений, которые были подписаны проверяемым способом. Существуют библиотеки, которые будут декодировать и проверять JWT. Общие шаги (некоторые из которых можно кэшировать или использовать ярлыки):

  1. Расшифруйте заголовок, чтобы получить kid (идентификатор ключа) и полезную нагрузку для получения iss(эмитент) поля. Вам также понадобитсяnbf (не раньше) и exp (срок действия), чтобы убедиться, что это было недавно установлено и aud поле, чтобы убедиться, что он соответствует вашему идентификатору проекта Google Cloud.
  2. В зависимости от эмитента, получите доступ к хорошо известной конфигурации openid. Поскольку эмитент - https://accounts.google.com, вы можете получить к нему доступ по адресу https://accounts.google.com/.well-known/openid-configuration.
  3. Из документа конфигурации вы хотите, чтобы jwks_uriполе, которое является URL-адресом для получения текущих сертификатов JWT. Для Google это, вероятно, https://www.googleapis.com/oauth2/v3/certs.
  4. Документ сертификата должен содержать массив ключей. Вам нужен ключ сkid что соответствует kidиз JWT. Обратите внимание, что эти клавиши меняются часто, но пока вы находитесь в окнеnbf а также exp поля из заголовка подписи, ключ должен существовать в документе сертификата.
  5. После этого вы можете проверить подпись JWT.
Другие вопросы по тегам