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

How to get Keycloak users via REST without admin account

有没有办法使用管理员帐户通过 REST WITHOUT 获取 Keycloak 领域的用户列表?也许是来自管理控制台的某种可分配角色?寻找任何想法。

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

获取令牌(通过 request 从 node.js 应用):

uri: `${keycloakUri}/realms/master/protocol/openid-connect/token`,
form: {
  grant_type: 'password',
  client_id: 'admin-cli',
  username: adminUsername,
  password: adminPassword,
}

使用令牌:

uri: `${keycloakUri}/admin/realms/${keycloakRealm}/users`,
headers: {
  'authorization': `bearer ${passwordGrantToken}`,
}

我希望能够使用来自客户端应用程序的通用用户信息(用户名、电子邮件、全名)。

您需要从 realm-management 客户端为所需用户分配 view-users 角色。那将是用户的配置:

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

此外,与提出的问题无关,我强烈建议您不要使用 grant_type=password,除非您绝对需要。来自 keycloak blog:

RESULT=`curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token`

This is a bit cryptic and luckily this is not how you should really be obtaining tokens. Tokens should be obtained by web applications by redirecting to the Keycloak login page. We're only doing this so we can test the service as we don't have an application that can invoke the service yet. Basically what we are doing here is invoking Keycloaks OpenID Connect token endpoint with grant type set to password which is the Resource Owner Credentials flow that allows swapping a username and a password for a token.

另见 Oauth2 spec