Bot Framework v3:如何正确执行用户注销?

时间:2019-05-30 20:00:20

标签: c# botframework

我目前正在使用Bot Framework v3 SDK for C#。我的问题出现在我注销用户时,它没有从弹出窗口中清除用户的登录凭据(注意:弹出窗口打开的是应用内浏览器,而不是我的浏览器)。因此,当我的机器人提示用户再次登录(使用登录卡)时,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);

其中contextIDialogContext对象,而ConnectionName是我的AAD的OAuth连接名称的字符串。

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

我在网上找到的所有文档和示例都使用此单一代码语句来注销用户。我做的事情有什么错误/遗漏吗?有什么替代方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

在SignOutUserAsync()调用中,令牌已从Azure删除。但是用户凭据仍保留在弹出窗口浏览器中。