key斗篷:在调用adminrestapi时,不能将用户领域角色读取为admin cli

kfgdxczn  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(391)

我使用keydape11作为我的spring引导服务的openid连接提供者。目前一切正常。
问题:
我有一个使用webclient的服务。它嵌套在我的服务中,并使用客户端身份验证和 admin-cli 客户。这很管用。当我执行get on/users/userid时,我得到了用户表示。我现在的问题是,用户的领域角色没有添加到表示中。
在文档中,这个参数被称为string[],并在userrepresentation中标记为可选。
我想如果我配置 Service account roles -> Client Roles -> realm-management -> realmAdmin ,客户端应该能够查看整个用户输出。
但是如果我使用postman并将api调用为ali admin,那么它就不会包含在json响应中。
我还尝试在key斗篷userrepresentationmodel中添加属性

public class KeycloakUserRepresentation {

    private String id;
    private String username;
    private String firstName;
    private String lastName;
    private String email;
    private Boolean emailVerified;
    private Boolean enabled;
    private Map<String, List<String>> attributes;
    private String[] realmRoles;

并执行请求。数组realmroles总是空的。
您能告诉我,要将用户realmroles读取为admin cli,需要配置什么吗?

20jt8wwn

20jt8wwn1#

您需要首先从 admin-cli 客户代表 admin (或具有类似权限的用户):

curl    -d "client_id=admin-cli" \
        -d "username=$ADMIN_NAME" \
        -d "password=$ADMIN_PASSWORD" \
        -d "grant_type=password" \
        https://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token

然后,要获取与给定领域角色关联的用户列表,请在调用以下端点时使用该令牌:

GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/roles/<ROLE_NAME>/users

JSON 您可以检查您的用户是否属于该列表。
或者,您可以调用restadminapi
获取用户,然后提取其 ID ;
通过使用其 ID 在对端点的调用中: GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>/role-mappings

qgzx9mmu

qgzx9mmu2#

我发现有两种方法。
第一:dreamcrash的网址提到:

GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/roles/<ROLE_NAME>/users

在这里,您将获得具有所请求角色的所有用户。
第二:

GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>/role-mappings

这里您可以得到特定用户的领域和客户机Map。
我认为解决方案2是更好的方法,因为您只加载特定用户的信息。解决方案1加载所有用户及其整个帐户信息。这可能导致性能不足。
我不明白的是,general/users/id端点没有返回userrepresentation响应对象中的大多数可选参数。我觉得总是在文件里找到一条路线真烦人。我知道这是一个开源项目,但我认为这应该是固定的,或者至少解释了如何配置keydepot来获取信息。

相关问题