17.5. 基本操作和资源 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]
create、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。
红帽构建的 Keycloak 有一个 域 端点,它是域的容器。它解析为:
SERVER_URI/admin/realms
SERVER_URI/admin/realms
红帽构建的 Keycloak 具有 serverinfo 端点。此端点独立于域。
当您以具有 realm-admin 电源的用户身份进行身份验证时,您可能需要在多个域中执行命令。如果是这样,指定 -r 选项,以指示命令要明确针对哪个域执行的域。命令改为使用由 kcadm.sh 配置凭证的 --realm 选项指定的 REALM,而是使用 TARGET_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 --password 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 --password admin
$ kcadm.sh create users -s username=testuser -s enabled=true -r demorealm
在本例中,您将在 master 域中启动一个以 admin 用户身份进行身份验证的会话。然后,您可以针对资源 URL http://localhost:8080/admin/realms/demorealm/users 执行 POST 调用。
create 和 update 命令将 JSON 正文发送到服务器。您可以使用 -f FILENAME 从文件中读取预先的文档。当使用 -f - 选项时,红帽构建的 Keycloak 从标准输入中读取消息正文。您可以指定单个属性及其值,如 创建用户示例中所示。红帽构建的 Keycloak 将属性组成 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 更新,它会在不首先运行 get 命令的情况下执行 put 命令。