c# - 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 服务中删除令牌。
我在网上找到的任何文档和示例都使用这个单一的代码语句来注销用户。我正在做的事情有问题/遗漏吗?有没有其他方法可以规避这个问题?
解决方案
这可能是因为您选择了“保持登录”选项。
在调用 SignOutUserAsync() 时,将从 Azure 中删除令牌。但是用户凭据仍然缓存在弹出窗口浏览器中。
推荐阅读
- json - 在 ruby 中自动转换 JSON 编码的数据
- java - Spring Tool Suite 中的错误“生命周期配置未涵盖插件执行:org.apache.maven.plugins
- xml - xslt 在同一级别上对多个 for-each 循环进行排序
- java - Java:在绘图线上标记的某些坐标
- jquery - 如何使用 ajax 提交多个表单并等待所有结果?
- java - 代码改进:统计数组中元素出现的次数,返回重复次数最多的元素
- smalltalk - 如何更改 SpTextPresenter 中的字体?
- kubernetes - Nginx 控制器中的 SSL 直通问题
- php - 如何处理elasticsearch range Beetween 2个日期
- python - 组合非唯一外键创建主键?