Я проверил аутентификацию, загрузив образец с 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": "Отсутствует токен илисекрет "}}