我目前正在使用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);
其中context
是IDialogContext
对象,而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中删除令牌。
我在网上找到的所有文档和示例都使用此单一代码语句来注销用户。我做的事情有什么错误/遗漏吗?有什么替代方法可以解决这个问题?
答案 0 :(得分:1)
这可能是因为您选择了“保持登录状态”选项。
在SignOutUserAsync()调用中,令牌已从Azure删除。但是用户凭据仍保留在弹出窗口浏览器中。