有没有办法通过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}`,
}
我希望能够使用来自客户端应用程序的通用用户信息(用户名,电子邮件,全名)。
答案 0 :(得分:13)
您需要为view-users
客户端分配所需用户的realm-management
角色。那将是用户的配置:
然后,您可以从${keycloakUri}/admin/realms/${keycloakRealm}/users
端点获取所有用户。这是通过邮差获得的信息:
此外,与问题无关,我强烈建议您不要使用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。