24

有没有办法在不使用管理员帐户的情况下通过 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,
}

使用令牌:

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

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

4

1 回答 1

43

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

在此处输入图像描述

然后您可以从${keycloakUri}/admin/realms/${keycloakRealm}/users端点获取所有用户。这是从 enpoint 检索到的信息,通过 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`

这有点神秘,幸运的是,这不是您真正应该获得令牌的方式。Web 应用程序应通过重定向到 Keycloak 登录页面来获取令牌。我们这样做只是为了测试服务,因为我们还没有可以调用服务的应用程序。基本上,我们在这里所做的是调用 Keycloaks OpenID Connect 令牌端点,授权类型设置为密码,这是资源所有者凭据流,允许交换用户名和密码以获取令牌。

另请参阅Oauth2 规范

于 2017-10-04T06:41:30.120 回答