检测用户在 keycloak 上的首次登录

问题描述 投票:0回答:1

我想通过令牌声明中的像

first_login
这样的布尔字段来检测用户是否在keycloak上登录,当用户第一次登录时可以将其设置为
true
。我找不到任何相关的预定义映射器,也找不到用于创建新的自定义映射器的用户属性here。 有办法做到吗?

keycloak
1个回答
0
投票

您可以使用事件侦听器 SPI 来完成此操作:

  1. 添加自定义用户属性

    first_login
    ,其值为 true 或 false。

  2. 创建一个新的协议映射器以将此属性添加到您的令牌声明中。

  3. 实现自定义事件监听器SPI来监听用户的登录事件并修改其

    first_login
    属性:

public class FirstLoginEventListener implements EventListenerProvider {
    private final KeycloakSession session;

    public FirstLoginEventListener(KeycloakSession session) {
        this.session = session;
    }

    @Override
    public void onEvent(Event event) {
        if (event.getType() == EventType.LOGIN) {
            String userId = event.getUserId();
            var user = session.users().getUserById(session.getContext().getRealm(), userId);

            String firstLoginAttr = user.getFirstAttribute("first_login");
            if (firstLoginAttr == null) {
                user.setSingleAttribute("first_login", "true");
            } else if (firstLoginAttr.equals("true")) {
                user.setSingleAttribute("first_login", "false");
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.