authentication - 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);
提前致谢。
解决方案
我已经通过维护每个流的用户和操作令牌表来解决这个问题。这意味着当用户启动新的操作流时,如果仍然有效,我可以获取前一个令牌,并使用 ActionTokenStoreProvider 使其无效,并将其替换为新令牌。我仍然希望 keycloak 有一些内部机制来管理这个,而不是我自己的自定义代码。如果您知道这一点,请放弃解决方案!
推荐阅读
- microsoft-graph-api - 如何从 Microsoft Graph API 资源管理器中区分用户邮箱和共享邮箱
- python-3.x - Paramiko SSH 客户端无法解压 ED25519 密钥
- django - “ManyToManyDescriptor”对象没有“添加”属性
- embedded - 如何覆盖 U-Boot“bootcmd”变量
- c# - 服务器端 .NET Core 中的 Session.SetString() 产生错误“响应开始后无法建立会话”
- google-cloud-platform - 限制对 GCE 实例元数据的访问
- python - 使用元组作为输入初始化一个类
- javascript - 使用不同的参数运行一个突变
- vue.js - 如何在 vue 中触发没有 $refs 的点击事件?
- java - 正则表达式未删除空行