Как получить токен доступа пользователя после аутентификации в Microsoft Teams Bot? - PullRequest
0 голосов
/ 30 марта 2020

Я разрабатываю свой первый бот из Microsoft Teams .

Я хочу, чтобы пользователь вводил команды в бот, бот должен отправлять запросы на мой внешний веб-сервер и отображать результаты в виде адаптивных карт. Я был в состоянии аутентифицировать бота с моим внешним сервером. Бот показывает маркер доступа пользователя после аутентификации. Отлично!

Как я могу получить токен доступа пользователя в своем коде бота или на веб-сервере для обработки входящего запроса от бота. Вот как выглядит мой бот-код.

this.onMessage(async (context, next) => {

     //I need a way to get the user's access token here 
     //or a way to fetch the access token from my web server 
     //based on some id in the context.
     const response = await myWebService.getData(context);

     // Run the Dialog with the new message Activity.
     await this.dialog.run(context, this.dialogState);
     await next();
});

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете захватить токен во время входа в систему. Предполагая, что вы структурировали процесс входа в систему примерно так, как показано ниже, результат входа пользователя передается из promptStep() в loginStep(). Он доступен в stepContext.result, который я назначил для tokenResponse и возвращаю пользователю в виде текста в упражнении.

Именно здесь вы можете выполнить дополнительные логи c, которые вам нужны.

async promptStep(stepContext) {
    return await stepContext.beginDialog(OAUTH_AAD_PROMPT);
}

async loginStep(stepContext) {
    // Get the token from the previous step. Note that we could also have gotten the
    // token directly from the prompt itself. There is an example of this in the next method.
    const tokenResponse = stepContext.result;
    if (tokenResponse) {
        return await stepContext.context.sendActivity(`Your token is: ${ tokenResponse.token }`);
    }
    await stepContext.context.sendActivity('Login was not successful, please try again.');
    return await stepContext.next();
}

Надежда на помощь!

0 голосов
/ 04 апреля 2020

GetUserTokenAsyn BotFrameworkAdapter c можно использовать для получения токена на любом этапе водопада, как показано ниже

var botAdapter = (BotFrameworkAdapter)stepContext.Context.Adapter;
TokenResponse result = await botAdapter.GetUserTokenAsync(stepContext.Context, connectionName, null, cancellationToken);
...