IdentityServer4反向通道注销问题

时间:2018-09-03 08:05:30

标签: asp.net authentication asp.net-core identityserver4 openid-connect

在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无效,从而导致成功注销。

状态服务器跟踪两个参数:id_token的09-03 15:45:51.378 26263 26263 I fncsdk : [FNMA] Device: room's device sub声明。

我遇到以下问题:

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

有人对如何防止这种情况有想法吗?

1 个答案:

答案 0 :(得分:1)

根据您的情况,当您的客户A执行“懒惰退出”时,我看不到任何问题,这触发了对IdSrv的新挑战,并以新令牌和新cookie完成。
重点不应是在每个特定的“延迟退出”上触发(循环)单次退出。