IdentityServer4反向通道注销问题

2023-11-29

在 ASP.NET Core 2 上使用 IdentityServer4。 使用 ASP.NET MVC5 与此用例相关的两个客户端。

编辑:使用cookie进行身份验证,隐式流程。

使用反向通道注销,如下所示:
* 涉及 4 个应用程序 - 两个客户端(我们称之为客户端 A 和客户端 B)、IdentityServer 实例和一个用于跟踪反向通道注销请求的状态服务器。

  1. 客户端 A 发起注销,使登录 cookie 失效。
  2. 客户端 用户使用正确的 id_token 被重定向到 IdentityServer 的 /account/logout。
  3. IdentityServer 使登录 cookie 无效,并为所有登录客户端调用反向通道注销操作。
  4. 客户端 B 的反向通道注销操作验证请求并将注销请求通知状态服务器。
  5. 当向客户端 B 发出下一个请求时,该客户端会查询状态服务器并获取有关未完成的注销请求的信息,这会导致其使注销 cookie 无效,从而导致成功注销。

状态服务器跟踪两个参数:sub and sid来自 id_token 的声明。

我遇到以下问题:

当用户登录到客户端 A,然后导航到客户端 B,然后在那里执行注销时,客户端 B 会注销,但客户端 A 不会注销,直到对其发出下一个请求。因此,如果用户现在决定使用另一个(或相同的,无关紧要)帐户登录客户端 B,然后导航到客户端 A,则客户端 A 将启动注销,因为有一个未完成的注销请求正在等待状态服务器,忽略用户同时再次登录的事实。

有谁知道如何防止这种情况?


根据您的场景,当您的客户端 A 执行“延迟注销”时,我看不到任何问题,这会触发对 IdSrv 的新挑战,并以新令牌和新 cookie 结束。
要点应该是不要在每个特定的“延迟注销”上触发(循环)单点注销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IdentityServer4反向通道注销问题 的相关文章

随机推荐