首页 > 解决方案 > Bot Framework v3:如何正确执行用户注销?

问题描述

我目前正在为 C# 使用 Bot Framework v3 SDK。当我注销用户时会出现我的问题,它不会从弹出窗口中清除用户的登录凭据(注意:弹出窗口打开的是应用内浏览器,而不是我的浏览器)。因此,当我的机器人提示用户再次登录(使用登录卡)时,Microsoft 帐户 ( https://login.microsoftonline.com/common) 的登录提示会显示一两秒,然后自动关闭。然后,我的机器人会根据先前已注销的用户接收访问令牌。我的测试环境是 Microsoft Teams 和 Bot Emulator。

要登录,我在处理用户登录并将授权令牌交换为访问令牌GetTokenDialog的命名空间中使用。Microsoft.Bot.Builder.Dialogs这部分工作正常,因为我可以使用此访问令牌进行 MS Graph 调用。

要退出,我目前正在使用Microsoft.Bot.Builder.Dialogs命名空间中提供的扩展库。

bool success = await context.SignOutUserAsync(ConnectionName);

wherecontext是一个IDialogContext对象,ConnectionName是我的 AAD 的 OAuth 连接名称的字符串。

使用 Fiddler,我知道这个单一代码语句发出 HTTP DELETE 请求以token.botframework.com从 Azure Bot 服务中删除令牌。它根据 HTTP 响应状态代码返回一个布尔值,我总是得到true价值。我的令牌已从 Azure 机器人服务中删除,但用于登录的弹出窗口会根据以前的凭据自动为用户签名。这让我相信,await context.SignOutUserAsync(ConnectionName);它不会向 Microsoft Online 发出注销调用以优雅地注销我的用户,而只会从 Azure Bot 服务中删除令牌。

我在网上找到的任何文档和示例都使用这个单一的代码语句来注销用户。我正在做的事情有问题/遗漏吗?有没有其他方法可以规避这个问题?

标签: c#botframework

解决方案


这可能是因为您选择了“保持登录”选项。

在调用 SignOutUserAsync() 时,将从 Azure 中删除令牌。但是用户凭据仍然缓存在弹出窗口浏览器中。


推荐阅读