当前位置: 首页 > 知识库问答 >
问题:

在Keyclock中,当user2尝试使用IDP登录页面登录时,如何自动注销(终止的会话)user1?

锺功
2023-03-14

我使用Keyclok(KC)作为OIDC的身份代理。

1) 浏览客户端应用程序并按登录按钮

2) 后台登录按钮将调用KC认证endpoint,该endpoint将显示IDP登录页面

3) User1为登录页面添加书签并输入凭据并开始使用客户端网站

4)用户1在未退出时关闭浏览器

5)用户2立即出现并点击显示IDP登录页面的书签页面

6)用户2输入凭据,并得到以下错误:

[错误信息][1] [1]: https://i.stack.imgur.com/vn83h.png

7)一旦用户按下“返回应用程序”,就会显示用户1屏幕(这将用户1的信息暴露给用户2)

当用户2尝试直接使用IDP登录页面登录而没有任何问题时,如果用户1的会话处于活动状态,我如何使其过期。

共有1个答案

薛鹏飞
2023-03-14

您必须实现一个自定义验证器,并将其添加到Keyclock中的身份验证流中。实现Keyclok的Authenticator接口。

首先,您需要获取当前用户的会话列表,如下所示:

List<UserSessionModel> userSessions = session.sessions().getUserSessions(context.getRealm(), context.getUser());

会话是一个键盘会话。上下文可以在您接下来要覆盖的方法身份验证中访问。在这里,我们可以开始实现您正在寻找的行为:

 private void logoutOldestSession(List<UserSessionModel> userSessions) {
        logger.info("Logging out oldest session");
        Optional<UserSessionModel> oldest = userSessions.stream().sorted(Comparator.comparingInt(UserSessionModel::getStarted)).findFirst();
        oldest.ifPresent(userSession -> AuthenticationManager.backchannelLogout(session, userSession, true));
    }

不要忘记在Keyclock发行版的部署下部署包含此行为的jar文件。此外,您必须在/META-INF/services下引用身份验证器。

 类似资料:
  • 我已经使用jsp创建了一个登录环境<代码>索引。jsp,登录。jsp。我从数据库中获取用户名和密码。如果用户名和密码与数据库匹配,则登录过程将完美完成。当用户给出错误的名称或密码时,它会显示错误消息,并重定向到登录页面。没什么问题,但我第一次登录时遇到了一个问题。提交错误名称或密码后显示错误消息的位置,该位置显示为空。 为什么显示null? 下面是我的代码 指数jsp login.jsp

  • 我制作了一个非常简单的登录和会话结构,以便在未来基于JSP的应用程序中重用。是这样的: 而位于WebContent根目录的login.jsp页面有一个 表单,其中包含用于身份验证的专用innerHTML和一个用于接收会话超时或登录失败消息的${failure}字段。 这个结构对我来说很管用。它拦截、请求登录、检查会话和身份验证,等等,但有一个小缺陷:如果您在登录页面并在超时后刷新它(F5或在URL

  • 用户登录 在用户登录App账号时调用以下登录方法,从而保证用户是以登录身份进行咨询,是区分会话的用户的唯一标识; 游客咨询不需要调用小能login方法,小能会自动生成一个游客身份标识,在客服端游客身份的用户名显示为:“游客+4位数字”。 App完全退出(被杀掉进程), 再次进入时, 在SDK初始化之后, 如果App本身账号是登录用户, 需要重新调用小能SDK登陆接口,同步用户身份【大多是针对App

  • 登录与注销 用户登录 在App登录的地方,调用小能的login方法,目的是传递账号信息,为客服端显示用户信息。在App被杀死之后,sdk会保持用户的登录状态,不需要再次调用登录的方法。 uid作为用户的唯一标识需要保证唯一性,username可根据需要传入手机号、昵称等信息 /** * @param uid 必填,登录用户的id, 只能输入数字、英文字母和"@._—"四种字符,长度小于等于60位

  • 我正在使用hybridauth库。 Hybridauth文档说,通过存储会话数据,可以实现持久会话。 假设我在数据库中存储了用户会话数据。它包含oauth令牌、oauth刷新令牌等。。 使用oauth令牌,无需询问用户权限即可联系oauth服务器。 现在一切都好了。现在,如果用户登录到谷歌,如何准确地自动登录用户? ?

  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况