Keycloak:调用管理休息 API 时无法将用户领域角色读取为管理 cli

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

我使用 keycloak 11 作为我的 Spring Boot 服务的 openid 连接提供程序。到目前为止一切正常。

问题:

我有一项使用网络客户端的服务。它嵌套在我的服务中,并使用

admin-cli
客户端进行客户端身份验证。这样可行。当我在 /users/userId 上执行 get 操作时,我得到了用户表示。我现在遇到的问题是用户的领域角色没有添加到表示中。

docs 中,此参数被提及为 String [] 并在 UserRepresentation 中标记为可选。

我认为如果我配置

Service account roles -> Client Roles -> realm-management -> realmAdmin
,客户端应该能够查看整个用户输出。

但是如果我使用 postman 并以 ali-admin 身份调用 api,它不会包含在 JSON 响应中。

我还尝试在我的 KeycloakUserRepresentationModel 中添加该属性

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吗?

java spring-boot oauth keycloak openid-connect
2个回答
3
投票

更新:

Keycloak 17 Quarkus distribution
开始删除了/auth路径。因此,您可能需要从此答案中显示的端点调用中删除
/auth


首先,代表

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
响应中,您可以检查您的用户是否属于该列表。

或者,您可以调用 Rest Admin API 来

  1. 获取用户,然后提取其
    ID
    ;
  2. 通过在端点调用中使用其
    ID
    来获取与该用户关联的角色:
    GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>/role-mappings

0
投票

我发现有两种方法可以做到这一点。

首先:dreamcrash提到的url:

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

您可以在此处获取特定用户的领域和客户端映射。

我认为解决方案 2 是更好的方法,因为您只加载特定用户的信息。解决方案 1 加载所有用户及其整个帐户信息。这可能会导致性能不足。

我不明白的是,通用 /users/id 端点不会返回 UserRepresentation 响应对象中的大部分可选参数。我认为总是在文档中的某个地方找到一条路线真是太烦人了。我知道这是一个开源项目,但我认为这应该得到解决,或者至少解释一下如何配置 keycloak 来获取信息。

© www.soinside.com 2019 - 2024. All rights reserved.