使用用户存储SPI更新Keycloak中的用户角色映射

时间:2019-03-01 13:20:12

标签: roles keycloak

我已经开发了Keycloak Provider并将其注册到User Federation中。我的用户存储在MySQL数据库中。它工作正常,每当调用getUserById()时,keycloak就会调用我的已实现方法,并且将返回具有适当角色的用户,并对该用户进行缓存。 当我在外部(在某些其他/外部门户中)更新用户角色时出现问题,现在我想告诉Keycloak使缓存无效(可能通过某些REST API),以便它调用我的getUserById()或getUserByUsername()方法再次。

最好的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

出于身份验证的目的,有时有时不希望使用缓存来处理,您可以在每次调用isValid方法时强制用户存储从数据库加载用户。

在示例中:

我将这段代码放在isValid方法的顶部。

public boolean isValid(RealmModel realm, UserModel user, CredentialInput input)
{
        CustomUserAdapter userDb;
        if (user instanceof CachedUserModel)
        {
            userDb = (CustomUserAdapter)this.getUserByUsername(user.getUsername(), realm);
        }
        else if (user instanceof CustomUserAdapter)
        {
            userDb = (CustomUserAdapter)user;
        }
[...]
Your custom code
[...]
}

另一种方法是通过将“缓存策略”设置为NO_CACHE来更改用户联合设置。

Disable Cache Policy User Storage SPI