在 ASP.NET Core 2 上使用 IdentityServer4。
使用 ASP.NET MVC5 与此用例相关的两个客户端。
编辑:使用cookie进行身份验证,隐式流程。
使用反向通道注销,如下所示:
* 涉及 4 个应用程序 - 两个客户端(我们称之为客户端 A 和客户端 B)、IdentityServer 实例和一个用于跟踪反向通道注销请求的状态服务器。
- 客户端 A 发起注销,使登录 cookie 失效。
- 客户端 用户使用正确的 id_token 被重定向到 IdentityServer 的 /account/logout。
- IdentityServer 使登录 cookie 无效,并为所有登录客户端调用反向通道注销操作。
- 客户端 B 的反向通道注销操作验证请求并将注销请求通知状态服务器。
- 当向客户端 B 发出下一个请求时,该客户端会查询状态服务器并获取有关未完成的注销请求的信息,这会导致其使注销 cookie 无效,从而导致成功注销。
状态服务器跟踪两个参数:sub
and sid
来自 id_token 的声明。
我遇到以下问题:
当用户登录到客户端 A,然后导航到客户端 B,然后在那里执行注销时,客户端 B 会注销,但客户端 A 不会注销,直到对其发出下一个请求。因此,如果用户现在决定使用另一个(或相同的,无关紧要)帐户登录客户端 B,然后导航到客户端 A,则客户端 A 将启动注销,因为有一个未完成的注销请求正在等待状态服务器,忽略用户同时再次登录的事实。
有谁知道如何防止这种情况?
根据您的场景,当您的客户端 A 执行“延迟注销”时,我看不到任何问题,这会触发对 IdSrv 的新挑战,并以新令牌和新 cookie 结束。
要点应该是不要在每个特定的“延迟注销”上触发(循环)单点注销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)