Microsoft Teams身份验证:无法在Team bot(V4 SDK)中检索令牌

时间:2019-05-13 06:45:58

标签: c# authentication botframework access-token microsoft-teams

我有一个 Microsoft Teams机器人,并且我正在尝试使用 AAD(v2端点)对用户进行身份验证。该机器人使用 V4 SDK和OauthPrompt 。我可以登录,但无法获取令牌。

我正在使用OAuth卡。该卡正在Teams内部呈现。单击登录按钮后,它将转到Microsoft登录页面。用户登录后,机器人停止响应,因此我无法获取令牌。

我正在尝试的样本是: https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/18.bot-authenticationhttps://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/24.bot-authentication-msgraph

这两个示例都在模拟器内部进行。

下面是代码片段:

controls
properties

它永远不会到达代码:

               AddDialog(new OAuthPrompt(
            nameof(OAuthPrompt),
            new OAuthPromptSettings
            {
                ConnectionName = ConnectionName,
                Text = "Please Sign In",
                Title = "Sign In",
                Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
            }));


         AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt)));

        AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
        {
            PromptStepAsync,
            LoginStepAsync,
            DisplayTokenPhase1Async,
            DisplayTokenPhase2Async,
        }));

我希望一旦用户登录,令牌就会在代码中收到,但该漫游器只是停止响应。

2 个答案:

答案 0 :(得分:1)

似乎这是Bot框架中的错误,但是已经有一个pull请求来解决此问题。您可以找到拉取请求here

答案 1 :(得分:0)

这就是我的工作方式。

public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {

        await base.OnTurnAsync(turnContext, cancellationToken);

        // Save any state changes that might have occured during the turn.
        await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
        await UserState.SaveChangesAsync(turnContext, false, cancellationToken);

           if (turnContext.Activity.Name == "signin/verifyState")
            {

                await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);

            }

      }

然后转到Waterfall的LoginStepAsync步骤。