首页 > 解决方案 > Keycloak Action Tokens:当用户请求多个操作时如何使用户先前的操作无效(例如重置密码)

问题描述

我希望能够使身份验证流程中的用户的任何操作令牌无效。

该场景是用户发送重置密码并接收带有关联操作令牌的电子邮件。然后,用户发送另一个重置密码并收到另一封关联不同操作令牌的电子邮件。对于第一个操作令牌到期时间的长度,用户可以使用两封电子邮件中的链接 - 但是我希望能够在我的自定义重置密码身份验证流程中识别用户正在请求重复操作请求并使他们之前的操作无效操作令牌,以便只有他们最新的重置密码链接有效。

我一直在查看以下对象,但没有找到与所有用户活动相关联的操作令牌存储,而不仅仅是他们当前经过身份验证的会话。

AuthenticationFlowContext context;

            List<UserSessionModel> sessions = context.getSession().sessions().getUserSessions(context.getRealm(), user);

            RootAuthenticationSessionModel parentSessions = context.getAuthenticationSession().getParentSession();

            ActionTokenStoreProvider actionTokenStore = session.getProvider(ActionTokenStoreProvider.class);

提前致谢。

标签: authenticationsingle-sign-ontokenkeycloak

解决方案


我已经通过维护每个流的用户和操作令牌表来解决这个问题。这意味着当用户启动新的操作流时,如果仍然有效,我可以获取前一个令牌,并使用 ActionTokenStoreProvider 使其无效,并将其替换为新令牌。我仍然希望 keycloak 有一些内部机制来管理这个,而不是我自己的自定义代码。如果您知道这一点,请放弃解决方案!


推荐阅读