Ошибка токена в проверке подлинности Azure AAD с помощью подсказки Oauth - PullRequest
0 голосов
/ 08 мая 2019

Я проверил аутентификацию, загрузив образец с github .Я успешно опубликовал на Azure после изменения имени подключения и смог войти и отобразить токен.Однако, когда я начал интегрировать ту же аутентификацию в своем приложении бота (используется корпоративный бот) после нажатия кнопки входа и копирования магического номера обратно в бот, я не получаю ответ токена.

Яиспользуя веб-чат по прямой линии.Я настроил URL перенаправления все правильно.Когда я проверил информацию приложения для отслеживания ошибок, я получаю сообщение об ошибке ниже

GET / api / usertoken / GetToken Код результата: 404

Ниже приведен код:

        public AuthenticationDialog(string connectionName)
        : base(nameof(AuthenticationDialog))
    {
        InitialDialogId = nameof(AuthenticationDialog);
        ConnectionName = connectionName;

        var authenticate = new WaterfallStep[]
        {
            PromptToLogin,
            FinishLoginDialog,
        };

        AddDialog(new OAuthPrompt(DialogIds.LoginPrompt, new OAuthPromptSettings()
        {
            ConnectionName = ConnectionName,
            Title = AuthenticationStrings.TITLE,
            Text = AuthenticationStrings.PROMPT,
            Timeout = 300000,
        }));
        AddDialog(new WaterfallDialog(InitialDialogId, authenticate));

    }


       private async Task<DialogTurnResult> PromptToLogin(WaterfallStepContext sc, CancellationToken cancellationToken)
    {
        return await sc.PromptAsync(DialogIds.LoginPrompt, new PromptOptions(),cancellationToken);
    }

    private async Task<DialogTurnResult> FinishLoginDialog(WaterfallStepContext step, CancellationToken cancellationToken)
    {
        if (step.Result != null)
        {
            // We do not need to store the token in the bot. When we need the token we can
            // send another prompt. If the token is valid the user will not need to log back in.
            // The token will be available in the Result property of the task.
            var tokenResponse = step.Result as TokenResponse;

            // If we have the token use the user is authenticated so we may use it to make API calls.
            if (tokenResponse?.Token != null)
            {
                await step.Context.SendActivityAsync($"Your token is: {tokenResponse.Token}", cancellationToken: cancellationToken);

            }
            else
            {
                await step.Context.SendActivityAsync("We couldn't log you in. Please try again later.", cancellationToken: cancellationToken);
            }

        }
        return await step.EndDialogAsync(cancellationToken: cancellationToken);
    }

Примечание: я пробовал и AAD V1 и AAD V2, оба приводящие к той же самой ошибке.Что я делаю не так.

Обновление Целевая среда: версия .NET Core 2.2 Bot Builder: 4.3.1

HTML-код:

 <!DOCTYPE html>
 <html>
 <body>
 <div id="webchat" role="main" style="height:700px;"></div>
 <script src="https://cdn.botframework.com/botframework- 
 webchat/latest/webchat.js"></script>
 <script>
  window.WebChat.renderWebChat({
      directLine: window.WebChat.createDirectLine({ token: 'tokenid' }),
    userID: 'YOUR_USER_ID',
    username: 'User',
    locale: 'en-US',
    botAvatarInitials: 'Bot',
    userAvatarInitials: 'WW'
  }, document.getElementById('webchat'));
  </script>
 </body>
 </html>

Когда я проверил инструменты разработчика Chrome, я получаю сообщение об ошибке ниже

https://directline.botframework.com/v3/directline/session/getsessionid

{"error": {"code": "BadArgument", "message": "Отсутствует токен илисекрет "}}

...