如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户
Posted
技术标签:
【中文标题】如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户【英文标题】:How to get Keycloak users via REST without admin account 【发布时间】:2018-03-10 06:37:21 【问题描述】:有没有办法使用管理员帐户通过 REST 无需 获取 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`,
我希望能够使用来自客户端应用程序的通用用户信息(用户名、电子邮件、全名)。
【问题讨论】:
我正在尝试为每个用户获取 lastLogin,到目前为止,我得到了 lastAccess,但仅适用于已登录的用户,如果我注销并更改用户,我现在为该新用户获取 lastAccess,它之前没有保存 1,有什么帮助吗? 【参考方案1】:您需要从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`
这有点神秘,幸运的是,这不是你真正应该获得令牌的方式。 Web 应用程序应通过重定向到 Keycloak 登录页面来获取令牌。我们这样做只是为了测试服务,因为我们还没有可以调用服务的应用程序。基本上,我们在这里所做的是调用 Keycloaks OpenID Connect 令牌端点,授权类型设置为密码,这是资源所有者凭据流,允许交换用户名和密码以获取令牌。
另请参阅Oauth2 spec。
【讨论】:
感谢您的回答。您会推荐什么来代替密码授权?将获取用户的 node.js 应用程序是一个纯开发应用程序,需要读取用户 - 它将在安全服务器上以 cron-job 类型设置运行。现在它正在使用存储在本地 JSON 文件中的管理员凭据来进行读取。我可以将 JSON 文件中的这些管理员凭据切换为仅具有上述视图用户角色的用户的凭据。有没有更好的办法? 如果是 cron 访问用户 a 宁愿使用 client credentials grant。通过这种方式,您可以将客户端密码存储在本地 JSON 中,然后以 CLIENT 身份登录(我不知道这是否在适配器中实现,否则很容易手动完成,请查看我的链接)。然后,您必须以与用户完全相同的方式管理令牌(刷新它)。另见***.com/questions/41756879/…快乐代码;-) 感谢您的解释。我还需要检索用户认可的角色(领域角色)。在阅读 API 文档here 时,似乎UserRepresentation
应该有一些realmRoles
attributes,因为此解决方案没有出现任何属性...
您好,我想您需要通过角色的专用端点检索它们。文档将此属性标记为可选,并且似乎没有填充,至少在早期版本的 KC 中:keycloak-user.88327.x6.nabble.com/…
@XtremeBiker 嗨,我非常喜欢 keycloak,请您帮助实现我的目标。首先,我需要在获取令牌后将用户传递给 keycloak REST apt 以获取令牌,我需要使用我的 REST api 传递此令牌。但是,我无法找到任何 API 与 KeyClock 服务器交互以获取令牌。请帮帮我以上是关于如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户的主要内容,如果未能解决你的问题,请参考以下文章
在 Drupal 中,如何在没有管理员批准和用户设置密码的情况下激活电子邮件帐户?
如何在没有 Windows 凭据管理器的情况下更改我的 git 帐户凭据
如何在没有 root 访问权限的情况下安装 python 模块?