Azure Bot - Генерация токена Directline из html секрета скрытия страницы - PullRequest
0 голосов
/ 26 февраля 2020

Я пытался поработать с бот-сервисом azure, используя Direct Line Channel со страницы html. Сценарий на странице html выглядит следующим образом:

index. html

 var directLine = new window.WebChat.createDirectLine({ secret: 'SECRET' });

  directLine.postActivity({
from: { id: 'myUserId', name: 'myUserName' }, // required (from.name is optional)
type: 'message',
text: 'hi'
}).subscribe(
     id => console.log("Posted activity, assigned ID ", id),
     error => console.log("Error posting activity", error)
);

directLine.activity$
.filter(activity => activity.type === 'message')
.subscribe(
     message => console.log("received message ", message)
  );

Я нашел API "https://directline.botframework.com/v3/directline/tokens/generate", где секрет может быть обменен с маркер, но SECRET необходимо добавить в заголовок авторизации.

Есть ли способ скрыть SECRET на странице html без использования архитектуры MVC? Или любой другой способ взаимодействия без предоставления ключа SECRET.

1 Ответ

1 голос
/ 26 февраля 2020

Нет, скрыть секрет невозможно. Если он находится на веб-странице, он доступен любому, кто проверяет источник.

Однако вам не обязательно выбирать установку MVC. Все, что вам нужно сделать, - это создать службу с API, к которым вы можете получить доступ.

Если вы посмотрите на вторую половину этого решения , которое я ранее предоставил, я продемонстрирую простую настройку, которую я запускаю локально для целей развития. Со страницы, на которой размещен экземпляр веб-чата, я звоню на свою пользовательскую конечную точку /directline/token. Служба, добавленная к файлу index.js моего бота, получает токен и возвращает его для использования в веб-чате.

В работе я помещаю «сервер токенов» в его собственный файл и развертываю его с помощью веб-приложение. Он работает в фоновом режиме на сервере, оставаясь недоступным (в виде файла), но доступным через API. Просто заблокируйте ресурсы API, и у вас все получится go.

...