Проблема с распространением токена DirectLine для бота

на основе этого Аутентификация бота DirectLine,

Если вы планируете распространять токен среди клиентов и хотите, чтобы они инициировали диалог, используйте операцию Generate Token.

Означает ли это, что мы можем сгенерировать токен из бэкэнда с помощью Secret и передать токен клиенту для начала разговора?

Чтобы проверить это, я написал следующее:

Backend: @Azure Function

  [FunctionName("XXXXX")]
    public static async Task<object> RunAsync([HttpTrigger(Route = "XXXXX")] HttpRequestMessage req, TraceWriter log)
    {
        log.Info($"Webhook was triggered!");

        var tokenResponse = await new DirectLineClient(directLineSecret).Tokens.GenerateTokenForNewConversationAsync();
        return req.CreateResponse(HttpStatusCode.OK, tokenResponse.Token);
    }

а также

Client @UWP
// token from Backend
directLineClient = new DirectLineClient(token);
var conversation = directLineClient.Conversations.StartConversation();

странно, что переменная беседа имеет значение null.

Когда я помещаю код генерации токена Backend клиенту, он работает так, что переменная беседа является допустимым объектом.

у меня вопрос: можем ли мы поместить генерацию токена в бэкэнд и раздать токен клиентам?


person Paul    schedule 21.04.2018    source источник
comment
Есть ли исключения, когда вы используете его из бэкэнда?   -  person Nicolas R    schedule 22.04.2018
comment
Очень признателен. Никаких исключений в бэкэнде. Механизм правильный. Ошибочная часть, которую я обнаружил, - это внутренний код, который я не добавил в ответ Media Type, из-за чего токен неправильно понимает, что токен является json, и добавляет ненужные заключенные кавычки в токен.   -  person Paul    schedule 23.04.2018


Ответы (2)


у меня вопрос: можем ли мы поместить генерацию токена в бэкэнд и раздать токен клиентам?

Конечно, если вы не хотите раскрывать / делиться секретом прямой линии публично, вы можете сгенерировать токен в серверной службе и распространить токен среди клиентов, чтобы они могли инициировать диалог.

Примечание. убедитесь, что токен Direct Line, сгенерированный вашей HTTP-функцией, не истек, когда вы используете его в своем клиенте DirectLine.

Я провожу тест с помощью DirectLineClient из Образца бота Direct Line и измените код, чтобы он принимал токен прямой линии. Если я предоставлю токен Direct Line с истекшим сроком действия, начать разговор не удастся.

введите здесь описание изображения

person Fei Han    schedule 23.04.2018
comment
Очень признателен. Ты прав. Механизм правильный. Ошибочная часть, которую я обнаружил, - это внутренний код, который я не добавил в ответ Media Type, из-за чего токен неправильно понимает, что токен является json, и добавляет ненужные заключенные кавычки в токен. вернуть req.CreateResponse (HttpStatusCode.OK, tokenResponse.Token, text / plain); - person Paul; 23.04.2018

Проблема в том, что серверная часть должна возвращать токен как тип текстового носителя. очень признателен за ваши отзывы и напоминания.

 return req.CreateResponse(HttpStatusCode.OK, tokenResponse.Token, "text/plain");
person Paul    schedule 23.04.2018