如何使用 httppost/rest-api 从 keycloak 获取用户列表
Posted
技术标签:
【中文标题】如何使用 httppost/rest-api 从 keycloak 获取用户列表【英文标题】:how to get the list of users from keycloak by using httppost/rest-api 【发布时间】:2018-07-01 20:11:39 【问题描述】:我是 keycloak 的新手,任何帮助都会很明显。 我可以使用 keycloak api 获取用户详细信息列表,我想知道如何使用 http-post 获取它。
Keycloak kc = Keycloak.getInstance("url-path", "realm", "username", "password", "admin-cli");
通过使用这个 keycloak 对象,我可以获得用户列表。但是,当我想通过使用 http-post 或通过使用 keycloak 给出的端点 url 调用 rest api 调用来获取用户列表时,我无法根据令牌获取访问令牌,我只得到特定用户,我想要使用rest api的用户列表。
【问题讨论】:
通过使用该 keycloak 对象,我可以获得用户列表。 但我想知道我们如何使用 http-post 或 keycloak 的 rest api 获取用户和会话详细信息的列表。 【参考方案1】:下面是通过key-cloak rest-api首先创建url来实现的步骤
String fetchAllUsers = URL+"/admin/realms/"+realmName+"/users?";
现在,如果您有数百万用户,您不想一次性获取所有用户,因此 keycloak 支持带分页的 rest-api,在您的休息后查询中,您可以询问
tenantName
,queryString
,Limit
,PageNumber
fetchAllUsers(String tenantName, List<String> queryString, String limit, String pageNumber)
现在这些东西将有助于创建一个查询,该查询将只发送不会影响 keycloak 和 web-api 性能的那么多记录。
在queryString
中,用户可以通过过滤条件,例如,如果他想按姓名、姓氏、电子邮件 ID 搜索,或者用户希望按升序或降序搜索结果。您必须解析并创建一个查询字符串,这样它才会类似于 keycloak 的其余查询。之后,您可以将查询字符串与 fetchAllUsers
连接起来。
你的查询会是这样的
https://<IP ADDRESS>/<PORT>/admin/realms/<REALM NAME>/users?q=username=<USER NAME>ASC&email=<EMAIL ID>&limit=<RECORD LIMIT>&page=<PAGE NO>
如果您发现任何错误,请忽略错字。
【讨论】:
我认为这行不通,因为如果您查看 keycloak rest admin api 这是keycloak.org/docs-api/5.0/rest-api/index.html 然后在GET /realm/users
端点详细信息下只有first
和max
查询参数可用的。您验证此查询是否有效?
检查github.com/keycloak/keycloak-community/blob/master/design/…
嗨,@Subodh 你知道如何通过 id 列表获取许多用户吗?
@cYee 我认为 ID 是安全的,但是你可以查看官方的 rest-api 文档。
我做到了,但似乎没有办法从 admin api 获取它,只是在 SO 中试试我的运气。【参考方案2】:
根据Offical Keycloak Admin REST API Docs(向下滚动一点到Get users Returns a list of users,filtered based on query parameters部分),你会发现有2个查询参数可用: first
和 max
。
如果您将 first
设置为 10 并将 max
设置为 15,则将跳过前 10 个用户,您将收到接下来的 15 个即用户 11 到 25 响应。
使用以下请求:
GET https://$KEYCLOAK_HOST/auth/admin/$REALM/users?first=10&max=15
附: - 不要忘记授权标头。
【讨论】:
更新了 url auth/admin/realms/以上是关于如何使用 httppost/rest-api 从 keycloak 获取用户列表的主要内容,如果未能解决你的问题,请参考以下文章