Keycloak:调用管理员休息时无法将用户领域角色读取为管理员 cli api
Keycloak: Can not read users realm roles as admin cli when calling the admin rest api
我使用 keycloak 11 作为我的 spring 引导服务的 openid 连接提供程序。目前一切正常。
问题:
我有一个使用网络客户端的服务。它嵌套在我的服务中,并使用 admin-cli
客户端的客户端身份验证。这样可行。当我在 /users/userId 上进行访问时,我得到了用户表示。我现在遇到的问题是用户的领域角色没有添加到表示中。
在 docs 中,此参数作为字符串 [] 提及,并在 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 吗?
您需要首先代表 admin
(或具有类似权限的用户)从 admin-cli
客户端请求令牌:
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 至
- 获取用户,然后提取其
ID
;
- 通过在对端点的调用中使用其
ID
获取与该用户关联的角色:GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>/role-mappings
我发现有两种方法。
首先:提到的 url 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
在这里您可以获取特定用户的领域和客户端映射。
我认为解决方案 2 是更好的方法,因为您只加载特定用户的信息。解决方案 1 加载所有用户及其整个帐户信息。这可能会导致性能不足。
我不明白的是,通用 /users/id 端点不 return UserRepresentation 响应对象中的大部分可选参数。我认为总是在文档中的某处找到路线太烦人了。我知道这是一个开源项目,但我认为这应该得到解决,或者至少解释了如何配置 keycloak 来获取信息。
我使用 keycloak 11 作为我的 spring 引导服务的 openid 连接提供程序。目前一切正常。
问题:
我有一个使用网络客户端的服务。它嵌套在我的服务中,并使用 admin-cli
客户端的客户端身份验证。这样可行。当我在 /users/userId 上进行访问时,我得到了用户表示。我现在遇到的问题是用户的领域角色没有添加到表示中。
在 docs 中,此参数作为字符串 [] 提及,并在 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 吗?
您需要首先代表 admin
(或具有类似权限的用户)从 admin-cli
客户端请求令牌:
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 至
- 获取用户,然后提取其
ID
; - 通过在对端点的调用中使用其
ID
获取与该用户关联的角色:GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>/users/<USER_ID>/role-mappings
我发现有两种方法。
首先:提到的 url 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
在这里您可以获取特定用户的领域和客户端映射。
我认为解决方案 2 是更好的方法,因为您只加载特定用户的信息。解决方案 1 加载所有用户及其整个帐户信息。这可能会导致性能不足。
我不明白的是,通用 /users/id 端点不 return UserRepresentation 响应对象中的大部分可选参数。我认为总是在文档中的某处找到路线太烦人了。我知道这是一个开源项目,但我认为这应该得到解决,或者至少解释了如何配置 keycloak 来获取信息。