Как лучше всего передавать учетные данные в Dialogflow и обратно

Возможно, мне совсем не хватает этого в документации, но я ищу примеры передачи аутентификации в Dialogflow и из него.

Примеры Dialogflow, которые я нахожу, открыты для всех пользователей, но я хочу, чтобы взаимодействие Dialogflow было зарегистрировано под конкретным аутентифицированным пользователем. Я настраиваю Google Cloud Identity и Firestore Auth, но не могу найти хороших примеров того, как безопасно перемещать эту информацию аутентификации через Dialogflow в своих запросах к базе данных Firestore. Я использую NodeJS для внутренних веб-перехватчиков.


person YKStacker    schedule 01.11.2020    source источник


Ответы (1)


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

  1. Конечный пользователь аутентифицируется на вашем сервере
  2. Сервер создает новый сеанс для этого разговора в Dialogflow (или проверяет текущий сеанс)
  3. Ваш сервер использует поле payload в объекте QueryParameters в запросе detectIntent для передачи необходимой информации для проверки пользователя во время выполнения
  4. Настройте mTLS для своего веб-перехватчика, чтобы создать безопасное соединение.
  5. Используйте данные payload в запросе веб-перехватчика для аутентификации пользователя

ИЗМЕНИТЬ

При использовании Dialogflow-Messenger у вас нет прямого доступа к API Dialogflow; однако для шага 3 вы все равно можете передать значение queryParams.payload через user-id Настройка HTML.

значение идентификатора пользователя в настройке HTML

Вот пример того, как установить его динамически:

const dfMessenger = document.querySelector('df-messenger');
dfMessenger.setAttribute("user-id", YOUR_USER); // Sent to Dialogflow API through queryParams.payload
person Tlaquetzal    schedule 02.11.2020
comment
Это кажется хорошим решением, особенно с безопасным соединением mTLS. Мне любопытно, видит ли кто-нибудь какие-либо дыры или проблемы в этом подходе. - person YKStacker; 04.11.2020
comment
Как мне получить uid или другие учетные данные из сеанса в полезную нагрузку? В частности, если я запускаю код в функции Google, как мне загрузить учетные данные, чтобы иметь возможность заполнять полезную нагрузку? - person YKStacker; 07.11.2020
comment
Это действительно будет зависеть от того, как вы аутентифицируете пользователей и как вы получаете доступ к данным аутентификации. Например, если вы используете вызываемые функции, у вас будет информация для аутентификации. в объекте context. Затем вы можете включить его в detectIntent request, например, в теле json - ›queryParams -› payload, а затем использовать его в веб-перехватчике выполнения для аутентификации пользователя. - person Tlaquetzal; 09.11.2020
comment
Если у вас есть определенные сомнения относительно этих шагов, применяемых к вашему варианту использования, например, как получить информацию для аутентификации из Firestore auth или как использовать SDK для аутентификации пользователя, рассмотрите возможность создания нового вопроса и включения деталей вашей архитектуры и сомнений. - person Tlaquetzal; 09.11.2020
comment
Вы знаете где-нибудь с образцом кода, которому я могу следовать? Я открыт для других подходов, но в настоящее время я аутентифицирую пользователя с помощью Google Cloud Identity на простой веб-странице. На этой веб-странице с доступом только с аутентификацией есть Dialogflow Messenger. Я не понимаю, как получить учетные данные для аутентификации, введенные в вызов из Dialogflow Messenger в Dialogflow. Тогда, я думаю, я смогу перенести это в облачную функцию оттуда, но пример проекта или кода мне очень поможет. - person YKStacker; 11.11.2020
comment
Понятно. В упомянутом мной подходе не учитывалось, что вы уже использовали такую ​​интеграцию, как Dialogflow-Messenger. Интеграция обрабатывает вызовы API Dialogflow, поэтому обычно невозможно добавить информацию к вызову, если интеграция не предоставляет вам эти поля. К счастью, интеграция Dialogflow-Messenger имеет поле идентификатора пользователя, которое работает для отправки информации в полезных данных queryParams. Я отредактировал ответ, чтобы включить это. Что касается кода, у меня нет примера кода, который можно было бы порекомендовать здесь, но я также включил небольшой фрагмент, который может помочь - person Tlaquetzal; 12.11.2020
comment
@Tlaquetzal Я только что попробовал этот пример для Dialogflow-Messenger и распечатал тело и заголовок запроса, но идентификатор пользователя (или что-то еще, что я пробовал) не отображается. единственное, что мне удалось изменить, это идентификатор сеанса, есть ли для этого причина? - person Dev138; 04.01.2021