如何在没有管理员帐户的情况下通过REST获取Keycloak用户

Bor*_*eco 13 keycloak keycloak-services

有没有办法通过REST获取Keycloak领域的用户列表而不使用管理员帐户?管理控制台可能有某种可分配的角色?寻找任何想法.

现在我正在使用管理员凭据来获取访问令牌,然后使用该令牌从realm/users端点提取用户.

获取令牌(来自node.js应用程序request):

uri: `${keycloakUri}/realms/master/protocol/openid-connect/token`,
form: {
  grant_type: 'password',
  client_id: 'admin-cli',
  username: adminUsername,
  password: adminPassword,
}
Run Code Online (Sandbox Code Playgroud)

使用令牌:

uri: `${keycloakUri}/admin/realms/${keycloakRealm}/users`,
headers: {
  'authorization': `bearer ${passwordGrantToken}`,
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用客户端应用程序中的通用用户信息(用户名,电子邮件,全名).

Xtr*_*ica 20

您需要view-usersrealm-management客户端为所需用户分配角色.这将是用户的配置:

在此输入图像描述

然后,您可以从${keycloakUri}/admin/realms/${keycloakRealm}/users端点获取所有用户.这是从连接点检索到的信息,通过Postman加入:

在此输入图像描述

此外,与问题无关,我强烈建议你不要使用,grant_type=password除非你绝对需要.来自keycloak博客:

RESULT=`curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token`
Run Code Online (Sandbox Code Playgroud)

这有点神秘,幸运的是,这不是你应该如何获得令牌.应通过重定向到Keycloak登录页面来获取Web应用程序的标记.我们只是这样做,所以我们可以测试服务,因为我们还没有可以调用服务的应用程序.基本上我们在这里做的是调用Keycloaks OpenID Connect令牌端点,将grant type设置为password,这是资源所有者凭据流,允许交换令牌的用户名和密码.

另见Oauth2规范.