18.6. 基本操作和资源 URI
Admin CLI 通常可以对 Admin REST API 端点执行 CRUD 操作,以及简化特定任务的额外命令。
列出了主要的使用模式:
kcadm.sh create ENDPOINT [ARGUMENTS] kcadm.sh get ENDPOINT [ARGUMENTS] kcadm.sh update ENDPOINT [ARGUMENTS] kcadm.sh delete ENDPOINT [ARGUMENTS]
$ kcadm.sh create ENDPOINT [ARGUMENTS]
$ kcadm.sh get ENDPOINT [ARGUMENTS]
$ kcadm.sh update ENDPOINT [ARGUMENTS]
$ kcadm.sh delete ENDPOINT [ARGUMENTS]
创建
、get
、update
和 delete
命令分别映射到 HTTP 动词 POST
、GET
、PUT
和 DELETE
。ENDPOINT 是一个目标资源 URI,可以是绝对(以 http:
或 https:
开始)或相对,红帽构建的 Keycloak 用来编写以下格式的绝对 URL:
SERVER_URI/admin/realms/REALM/ENDPOINT
SERVER_URI/admin/realms/REALM/ENDPOINT
例如:如果您对服务器 http://localhost:8080 进行身份验证,并且 realm 为 master
,使用 用户作为
ENDPOINT 创建 http://localhost:8080/admin/realms/master/users 资源 URL。
如果将 ENDPOINT 设置为 客户端
,则有效资源 URI 为 http://localhost:8080/admin/realms/master/clients。
Red Hat build of Keycloak 有一个 域
端点,它是 realm 的容器。它被解析为:
SERVER_URI/admin/realms
SERVER_URI/admin/realms
红帽构建的 Keycloak 具有 serverinfo
端点。此端点独立于域。
当您以具有 realm-admin 关闭的用户身份进行身份验证时,您可能需要对多个域执行命令。如果是这样,指定 -r
选项,以告知 CLI 命令要明确执行的域。命令使用 TARGET_
选项,而不是使用 REALM
kcadm.sh 配置凭据的
--realm
选项指定的。
SERVER_URI/admin/realms/TARGET_REALM/ENDPOINT
SERVER_URI/admin/realms/TARGET_REALM/ENDPOINT
例如:
kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin kcadm.sh create users -s username=testuser -s enabled=true -r demorealm
$ kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin
$ kcadm.sh create users -s username=testuser -s enabled=true -r demorealm
在本例中,您将在 master
域中启动一个以 admin
用户身份进行身份验证的会话。然后,您将针对资源 URL 执行 POST 调用 http://localhost:8080/admin/realms/demorealm/users
。
create
和 update
命令向服务器发送 JSON 正文。您可以使用 -f FILENAME
从文件中读取预先可用的文档。当使用 the -f -
选项时,红帽构建的 Keycloak 从标准输入中读取消息正文。您可以指定单独的属性及其值,如 创建用户示例中所示
。红帽构建的 Keycloak 将属性组成 JSON 正文,并将其发送到服务器。
--set, -s 选项中使用的 name=value 对中的值被假定为 JSON。如果无法解析为有效的 JSON,那么它将作为文本值发送到服务器。
如果该值在 shell 处理后用引号括起,但不是有效的 JSON,则引号将被剥离,并且其余的值将以文本形式发送。这个行为已弃用,请考虑在没有引号的情况下指定您的值,或使用双引号指定有效的 JSON 字符串。
红帽构建的 Keycloak 中提供了几种方法,以使用 update
命令更新资源。您可以确定资源的当前状态,并将其保存到文件中,编辑该文件并将其发送到服务器以进行更新。
例如:
kcadm.sh get realms/demorealm > demorealm.json vi demorealm.json kcadm.sh update realms/demorealm -f demorealm.json
$ kcadm.sh get realms/demorealm > demorealm.json
$ vi demorealm.json
$ kcadm.sh update realms/demorealm -f demorealm.json
此方法使用发送 JSON 文档中的属性更新服务器上的资源。
另一种方法是使用 -s、--set
选项设置新值来执行在线更新。
例如:
kcadm.sh update realms/demorealm -s enabled=false
$ kcadm.sh update realms/demorealm -s enabled=false
此方法将 enabled
属性设置为 false
。
默认情况下,update
命令会执行 get
,然后将新属性值与现有的值合并。在某些情况下,端点可能会支持 put
命令,但不支持 get
命令。您可以使用 -n
选项执行 no-merge 更新,该更新会执行 put
命令,而无需首先运行 get
命令。