是否可以将 IdentityServer4 中的用户注销为其他用户?
Posted
技术标签:
【中文标题】是否可以将 IdentityServer4 中的用户注销为其他用户?【英文标题】:Is it possible to sign out a User in IdentityServer4 as a different user? 【发布时间】:2021-12-30 14:22:30 【问题描述】:我想弄清楚的流程是这样的:
-
UserA 登录到 ClientA
ClientA 重定向到身份服务器以验证用户身份
认证后ClientA在自己的系统中管理用户信息
UserA 被发现是“坏人”
AdminUser 进入 IdentityServer AdminTool(用于管理 IdentityServer 的不同客户端应用程序,包括用户)。
AdminUser 执行“撤销”UserA 的操作
从管理工具调用 IdentityServer 后端,其中 UserA 的“已启用”属性设置为 false。
此时,我想将用户从 IdentityServer 的后端踢出 ClientA。
更多上下文: IdentityServer 在客户端浏览器中使用 cookie 来保持“会话”(不确定这是否是正确的词,因为实际上没有任何状态被管理)。 还使用 cookie 来记住我。
有没有办法从后端删除 IdentityServer 的 cookie?或者通知客户端 UserA 应该不再有有效的身份验证,以便它可以执行 HttpContext.SignOutAsync()?
我正在查看此链接:https://docs.identityserver.io/en/latest/topics/signout.html 以获得指导,但我被困在如何以 AdminUser 身份从后端执行此操作。调用 HttpContext.SignOutAsync() 将注销发出请求的 AdminUser,而不是在 ClientA 中导致破坏的 UserA。
【问题讨论】:
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:在使用身份服务器的典型设置中,您拥有:
寿命短的 JWT 令牌 会话 cookieJWT 令牌需要经常更新。当没有有效的 JWT 时使用会话 cookie。在这种情况下,用户将被重定向到登录页面,如果有会话 cookie,用户将自动进行身份验证并重定向回客户端应用程序。
所以你有一些退出选项:
确保用户无法续订其 JWT(= 几分钟后注销) 确保用户无法再次登录 真正清除浏览器中的所有内容(并确保他无法再次登录/续订)回到你的问题
有没有办法从后端删除 IdentityServer 的 cookie?
这里的答案是允许双向通信的 WebSockets。
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_APIC# 的常用库是 Signal/R
https://dotnet.microsoft.com/apps/aspnet/signalr您将在服务器端创建一个 Hob,允许您向“坏用户”发送消息。
https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-6.0并在您的客户端应用程序中监听这些消息:
https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore-6.0请注意:无论您在客户端做什么,重要的部分通常是阻止服务器请求。删除客户端上的 cookie 是不安全的。您必须改为删除服务器端的会话。
补充说明:
您设置中的流程可能与我上面描述的不同。 我知道,这只是部分答案,但评论内容太多;-)【讨论】:
以上是关于是否可以将 IdentityServer4 中的用户注销为其他用户?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法撤销另一个用户的访问令牌并结束他们在 Identity Server 4 中的会话?