是否可以将 IdentityServer4 中的用户作为不同的用户注销?
Is it possible to sign out a User in IdentityServer4 as a different user?
我想弄清楚的流程是这样的:
- 用户 A 正在登录客户端 A
- ClientA 重定向到身份服务器以验证用户
- 认证后ClientA在自己的系统中管理用户信息
- 用户 A 被发现是“不良行为者”
- AdminUser 进入 IdentityServer AdminTool(用于管理 IdentityServer 的不同客户端应用程序,包括用户)。
- AdminUser 执行“撤销”UserA 的操作
- 从管理工具调用 IdentityServer 后端,其中 UserA 的“已启用”属性 设置为 false。
在流程的这一点上,我想将用户从 IdentityServer 的后端踢出 ClientA。
更多背景信息:
IdentityServer 在客户端浏览器中使用 cookie 来保持“会话”(不确定这是否是正确的词,因为实际上没有任何状态被管理)。
还使用 cookie 来记住我。
有没有办法从后端删除 IdentityServer 的 cookie?或者通知客户端 UserA 不应再具有有效的身份验证,以便它可以执行 HttpContext.SignOutAsync()?
我正在查看此 link:https://docs.identityserver.io/en/latest/topics/signout.html 以获取指导,但我仍然不知道如何以 AdminUser 的身份从后端执行此操作。调用 HttpContext.SignOutAsync() 会注销发出请求的 AdminUser,而不是在 ClientA 中造成严重破坏的 UserA。
在使用身份服务器的典型设置中,您有:
- 生命周期短的 JWT 令牌
- 会话 cookie
JWT 令牌需要经常更新。当没有有效的 JWT 时使用会话 cookie。在这种情况下,用户将被重定向到登录页面,如果有会话 cookie,用户将自动进行身份验证并重定向回客户端应用程序。
所以您有一些注销选项:
- 确保用户无法更新他的 JWT(= 几分钟后注销)
- 确保用户无法再次登录
- 真正清除浏览器中的所有内容(并确保他不能再次login/renew)
回到你的问题
Is there a way to remove the cookie for the IdentityServer from the back-end?
这里的答案是允许双向通信的 WebSockets。
C# 的通用库是 Signal/R
您可以在服务器端创建一个 Hob,允许您向“不良用户”发送消息。
并在您的客户端应用程序中收听这些消息:
请注意:无论您在客户端做什么,重要的部分通常是阻止服务器请求。删除客户端上的 cookie 是不安全的。您必须改为在服务器端删除会话。
补充说明:
- 您设置中的流程可能与我上面描述的不同。
- 我知道,这只是部分回答,但内容太多,无法发表评论 ;-)
我想弄清楚的流程是这样的:
- 用户 A 正在登录客户端 A
- ClientA 重定向到身份服务器以验证用户
- 认证后ClientA在自己的系统中管理用户信息
- 用户 A 被发现是“不良行为者”
- AdminUser 进入 IdentityServer AdminTool(用于管理 IdentityServer 的不同客户端应用程序,包括用户)。
- AdminUser 执行“撤销”UserA 的操作
- 从管理工具调用 IdentityServer 后端,其中 UserA 的“已启用”属性 设置为 false。
在流程的这一点上,我想将用户从 IdentityServer 的后端踢出 ClientA。
更多背景信息: IdentityServer 在客户端浏览器中使用 cookie 来保持“会话”(不确定这是否是正确的词,因为实际上没有任何状态被管理)。 还使用 cookie 来记住我。
有没有办法从后端删除 IdentityServer 的 cookie?或者通知客户端 UserA 不应再具有有效的身份验证,以便它可以执行 HttpContext.SignOutAsync()?
我正在查看此 link:https://docs.identityserver.io/en/latest/topics/signout.html 以获取指导,但我仍然不知道如何以 AdminUser 的身份从后端执行此操作。调用 HttpContext.SignOutAsync() 会注销发出请求的 AdminUser,而不是在 ClientA 中造成严重破坏的 UserA。
在使用身份服务器的典型设置中,您有:
- 生命周期短的 JWT 令牌
- 会话 cookie
JWT 令牌需要经常更新。当没有有效的 JWT 时使用会话 cookie。在这种情况下,用户将被重定向到登录页面,如果有会话 cookie,用户将自动进行身份验证并重定向回客户端应用程序。
所以您有一些注销选项:
- 确保用户无法更新他的 JWT(= 几分钟后注销)
- 确保用户无法再次登录
- 真正清除浏览器中的所有内容(并确保他不能再次login/renew)
回到你的问题
Is there a way to remove the cookie for the IdentityServer from the back-end?
这里的答案是允许双向通信的 WebSockets。
C# 的通用库是 Signal/R
您可以在服务器端创建一个 Hob,允许您向“不良用户”发送消息。
并在您的客户端应用程序中收听这些消息:
请注意:无论您在客户端做什么,重要的部分通常是阻止服务器请求。删除客户端上的 cookie 是不安全的。您必须改为在服务器端删除会话。
补充说明:
- 您设置中的流程可能与我上面描述的不同。
- 我知道,这只是部分回答,但内容太多,无法发表评论 ;-)