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

时间:2017-09-28 13:33:02

标签: keycloak keycloak-services

有没有办法通过REST WITHOUT 使用管理员帐户获取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}`,
}

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

1 个答案:

答案 0 :(得分:13)

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

enter image description here

然后,您可以从${keycloakUri}/admin/realms/${keycloakRealm}/users端点获取所有用户。这是通过邮差获得的信息:

enter image description here

此外,与问题无关,我强烈建议您不要使用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`
  

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

另请参阅Oauth2 spec