我们使用 Bot Framework(版本 4.0)构建了一个 Teams 机器人。该机器人运行良好。
我们想要完成的是在机器人中提供注销/登录功能。要注销,用户需要输入特殊命令(例如“注销”),我们就会注销用户。现在,当用户下次与机器人交互时,我们希望用户通过向他们显示 OAuth 对话框来手动登录。
这是我们为注销用户而编写的代码,它不会引发任何错误:
var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, _connectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);
await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
return await innerDc.CancelAllDialogsAsync(cancellationToken);
但是,当用户发送下一条消息时,Bot 框架会以某种方式自动将它们登录(我猜测登录会话在服务器上终止,但令牌不会从本地缓存中删除)。
我想知道是否有另一种方法可以完全注销用户并删除令牌缓存,以便在下一次对话中向用户显示 OAuth 登录对话框。
有人建议在本地删除 Teams 缓存文件夹,但这也不起作用。
我们甚至尝试了以下代码并得到相同的结果:
await MyOAuthPrompt.SignOutUserAsync(innerDc.Context);
有多种方法可以实现机器人身份验证。
1) 使用 SSO(单点登录)进行身份验证
您可以参考此示例: https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso
2)使用 OAuthCard 进行身份验证