我有一个 Microsoft Teams机器人,并且我正在尝试使用 AAD(v2端点)对用户进行身份验证。该机器人使用 V4 SDK和OauthPrompt 。我可以登录,但无法获取令牌。
我正在使用OAuth卡。该卡正在Teams内部呈现。单击登录按钮后,它将转到Microsoft登录页面。用户登录后,机器人停止响应,因此我无法获取令牌。
我正在尝试的样本是: https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/18.bot-authentication 和 https://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,
}));
我希望一旦用户登录,令牌就会在代码中收到,但该漫游器只是停止响应。
答案 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步骤。