允许每个用户的单个会话 IdentityServer4

Posted

技术标签:

【中文标题】允许每个用户的单个会话 IdentityServer4【英文标题】:Allow single session per user IdentityServer4 【发布时间】:2021-06-16 18:40:47 【问题描述】:

使用 IdentityServer4,我每次需要允许一个用户会话。如果用户使用设备 A 进行身份验证,然后使用 B 进行身份验证,则必须使 A 的会话和访问令牌无效,甚至更好的是,客户端 A 可以在第二步中收到用户已注销的通知。主要是使服务器强制使会话和令牌无效。有类似的问题,其中一个将我们重定向到以下链接:

https://github.com/IdentityServer/IdentityServer4/issues/736

其中解释了使用反向通道注销和身份服务器的登录方法来获取以前应该在某处持久化的 IdentityServer sessionID。然后我应该向所有客户端发送注销令牌。

这里给出了另一种解决方案 How to Logout user from a particular session Identity Server 4, .Net Core?

告诉我们使用 ITicketStore 实现来使会话无效。

使用的配置是带有 PKCE 的授权代码流的 IdentityServer4。哪种方法最适合我的情况?是否有另一种方法可以简单地删除 id 服务器数据库中的访问令牌?

【问题讨论】:

【参考方案1】:

我认为你的情况可能是两者的结合。在我们的实际实现中,我们通过ITicketStore 将会话的服务器端存储(存储在自定义数据库中,会话链接到用户帐户并存储每个会话的客户端 ID 列表)与触发反向通道的能力相结合随时注销任何会话(即不仅仅是通过默认的用户触发机制)。

在我们的例子中,我们这样做是为了能够因其他原因(例如密码或其他安全设置更改、“让我退出所有内容”功能、假冒权限被撤销等)而使会话无效,但这种方法可以构成基础如果您愿意,可以使用“每个用户一次会话”功能。

【讨论】:

以上是关于允许每个用户的单个会话 IdentityServer4的主要内容,如果未能解决你的问题,请参考以下文章

每个用户只允许一个会话

Firebase身份验证登录必须允许单个设备登录

symfony 3.3中的单个会话实现

每个用户的最大用户会话数 - apache shiro

通道单一连接(会话)到事件处理程序映射

WindowsWindows server2008远程桌面只允许同时存在一个会话