如何从Keycloak REST API获取用户 - Keycloak API响应403

16

你好,我想使用Keycloak API,但是不太了解它的工作原理。我想获取某个领域(realm)中的所有用户。因此,我首先要使用以下端点获取令牌:/realms/master/protocol/openid-connect/token,请求体中包含以下参数:

  • client_id
  • grant_type
  • username
  • password
  • client_secret

第一个问题是:我应该使用哪个客户端?

然后,我在Authorization标头中使用令牌调用此端点:/admin/realms/master/users,但是我得到了403状态码,我不明白为什么。

谢谢。

2个回答

22

您需要两步操作

  • 首先从主域的admin-cli客户端获取访问令牌

  • 其次,使用访问令牌调用管理员REST API,在Authorization标头中以Bearer作为前缀进行设置。

# get an access token
curl -X POST \
  https://<HOST>/auth/realms/master/protocol/openid-connect/token \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'cache-control: no-cache' \
  -d 'grant_type=password&username=<USERNAME>l&password=<PASSWORD>&client_id=admin-cli'

# get all users of gateway realm, use the token from above and use Bearer as prefix
curl -X GET \
  https://<HOST>/auth/admin/realms/gateway/users \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkI...' \
  -H 'cache-control: no-cache'

1
稍作更正,使用 Keycloak 19+ 版本时,需要从 URI 中删除 /auth。 - Kiran Pawar
我遇到了这个错误 {"error":"unknown_error"}% - SUBHIDH AGARWAL

21
一般来说,403表示您没有权限执行请求的操作(在这种情况下为查看用户)。您需要为使用的用户/客户定义“客户端角色”(“realm-management”),并分配正确的角色(在此情况下为“view-users”角色):
Keycloak 17+界面: 进入图像描述 或启用了“服务帐户”的客户端的Keycloak 17+界面 进入图像描述 Keycloak 17-界面: 进入图像描述

请问您能否看一下我的Keycloak相关问题 https://dev59.com/NK72oIgBc1ULPQZFyr--?谢谢。 - Honza Zidek
菜单在这些年里发生了变化。现在(Keycloak 17.0)客户端admin-cli有一个名为“服务账户角色”的菜单项。 - Flocke
现在它在哪里? - user_x
为什么我可以使用“admin-cli”客户端读取用户,但是其他客户端却不能呢?而且我找不到区别在哪里。 - user_x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接