如何通过Keycloak中的自定义属性吸引用户?

时间:2019-02-13 10:04:16

标签: keycloak

我知道有管理API可以获取返回用户表示形式数组的用户列表。

GET /admin/realms/{realm}/groups/{id}/members

返回

https://www.keycloak.org/docs-api/2.5/rest-api/index.html#_userrepresentation

但是有没有一种方法可以通过自定义属性来吸引用户?

2 个答案:

答案 0 :(得分:6)

默认情况下这是不可能的,但是Keycloak可以通过非常容易实现的服务提供商接口系统扩展其功能。

以下是新路线的示例,该路线允许按自定义属性进行搜索:

public class SearchByAttributeResourceProvider implements RealmResourceProvider {
    private KeycloakSession session;

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

    @Override
    public Object getResource() {
        return this;
    }

    @GET
    @Path("search-by-stuff/{stuffValue}")
    @Produces({MediaType.APPLICATION_JSON})
    public List<UserRepresentation> getUsersByStuff(@PathParam("stuffValue") String stuffValue) {
        return session
                .users()
                .searchForUserByUserAttribute("stuff", stuffValue, session.getContext().getRealm())
                                .stream()  
                                .map(userModel -> ModelToRepresentation.toRepresentation(session, session.getContext().getRealm(), userModel))
                                .collect(toList());
    } 

    @Override
    public void close() {

    }
}

您将在这里找到更多详细信息:https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_rest

答案 1 :(得分:0)

当前Keycloak API版本为4.8,并且有以下API: 获取用户返回根据查询参数过滤的用户列表

GET /{realm}/users

查看文档:{​​{3}}

API只能提供此“搜索”。如果需要按用户属性搜索,则需要在自己的代码中实现。