11.4. 使用客户端注册 CLI
流程
- 使用您的凭证登录来启动一个经过身份验证的会话。
在
客户端注册 REST 端点上
运行命令。例如,在:
Linux:
kcreg.sh config credentials --server http://localhost:8080 --realm demo --user user --client reg-cli kcreg.sh create -s clientId=my_client -s 'redirectUris=["http://localhost:8980/myapp/*"]' kcreg.sh get my_client
$ kcreg.sh config credentials --server http://localhost:8080 --realm demo --user user --client reg-cli $ kcreg.sh create -s clientId=my_client -s 'redirectUris=["http://localhost:8980/myapp/*"]' $ kcreg.sh get my_client
Copy to Clipboard Copied! Windows:
kcreg config credentials --server http://localhost:8080 --realm demo --user user --client reg-cli kcreg create -s clientId=my_client -s "redirectUris=[\"http://localhost:8980/myapp/*\"]" kcreg get my_client
c:\> kcreg config credentials --server http://localhost:8080 --realm demo --user user --client reg-cli c:\> kcreg create -s clientId=my_client -s "redirectUris=[\"http://localhost:8980/myapp/*\"]" c:\> kcreg get my_client
Copy to Clipboard Copied! 注意在生产环境中,必须使用
https:
访问红帽构建的 Keycloak:以避免向网络嗅探器公开令牌。
如果服务器证书不是由 Java 默认证书信任存储中包含的可信证书颁发机构(CA)发布的,准备
truststore.jks
文件,并指示客户端注册 CLI 使用它。例如,在:
Linux:
kcreg.sh config truststore --trustpass $PASSWORD ~/.keycloak/truststore.jks
$ kcreg.sh config truststore --trustpass $PASSWORD ~/.keycloak/truststore.jks
Copy to Clipboard Copied! Windows:
kcreg config truststore --trustpass %PASSWORD% %HOMEPATH%\.keycloak\truststore.jks
c:\> kcreg config truststore --trustpass %PASSWORD% %HOMEPATH%\.keycloak\truststore.jks
Copy to Clipboard Copied!
11.4.1. 登录
流程
- 当您使用客户端注册 CLI 登录时,指定服务器端点 URL 和域。
-
指定用户名或客户端 id,这会导致使用特殊服务帐户。在使用用户名时,您必须为指定用户使用密码。使用客户端 ID 时,请使用客户端 secret 或
Signed JWT
而不是密码。
无论登录方法如何,登录的帐户都需要适当的权限才能执行客户端注册操作。请记住,非 master 域中的任何帐户都只能有管理同一域中的客户端的权限。如果需要管理不同的域,您可以在不同的域中配置多个用户,或者在 master
域中创建单个用户,并添加用于管理不同域中客户端的角色。
您不能使用客户端注册 CLI 配置用户。使用 Admin Console Web 界面或 Admin Client CLI 来配置用户。如需了解更多详细信息,请参阅 服务器管理指南。
当 kcreg
成功登录时,它会接收授权令牌并将其保存在私有配置文件中,以便令牌可用于后续调用。有关配置文件的更多信息,请参阅 第 11.4.2 节 “使用其他配置”。
有关使用客户端注册 CLI 的更多信息,请参阅内置帮助。
例如,在:
- Linux:
kcreg.sh help
$ kcreg.sh help
- Windows:
kcreg help
c:\> kcreg help
有关启动经过身份验证的会话的更多信息,请参阅 kcreg config credentials --help
。
11.4.2. 使用其他配置
默认情况下,Client Registration CLI 会在用户的主目录下自动维护一个默认位置 ./.keycloak/kcreg.config
的配置文件。您可以使用-- config
选项指向不同的文件或位置,以并行维护多个经过身份验证的会话。执行从一个线程绑定到单个配置文件的操作是最安全的。
不要使配置文件对系统上的其他用户可见。配置文件 包含应保持私有的访问令牌和 secret。
您可能希望通过在所有命令中使用 --no-config
选项避免将 secret 存储到配置文件中,即使它不太方便,并且需要更多令牌请求才能这样做。使用每个 kcreg
调用指定所有身份验证信息。
11.4.3. 初始访问和注册访问令牌
在它们要使用的红帽构建的 Keycloak 服务器中没有配置帐户的开发人员可以使用客户端注册 CLI。只有域管理员向开发人员发出初始访问令牌时,才能执行此操作。域管理员由域管理员决定如何发布和发布这些令牌。域管理员可以限制 Initial Access Token 的最长期限,以及可通过它创建的客户端总数。
开发人员具有 Initial Access Token 后,开发人员可以使用它来创建新客户端,而无需使用 kcreg 配置凭证进行身份验证
。Initial Access Token 可以存储在配置文件中,也可以指定为 kcreg create
命令的一部分。
例如,在:
- Linux:
kcreg.sh config initial-token $TOKEN kcreg.sh create -s clientId=myclient
$ kcreg.sh config initial-token $TOKEN
$ kcreg.sh create -s clientId=myclient
或者
kcreg.sh create -s clientId=myclient -t $TOKEN
$ kcreg.sh create -s clientId=myclient -t $TOKEN
- Windows:
kcreg config initial-token %TOKEN% kcreg create -s clientId=myclient
c:\> kcreg config initial-token %TOKEN%
c:\> kcreg create -s clientId=myclient
或者
kcreg create -s clientId=myclient -t %TOKEN%
c:\> kcreg create -s clientId=myclient -t %TOKEN%
使用 Initial Access Token 时,服务器响应包括新发布的注册访问令牌。对该客户端的任何后续操作都需要通过使用该令牌进行身份验证来执行,这仅对该客户端有效。
客户端注册 CLI 自动使用其专用配置文件来保存并使用此令牌及其关联的客户端。只要将相同的配置文件用于所有客户端操作,开发人员就不需要进行身份验证来读取、更新或删除以这种方式创建的客户端。
有关初始访问和注册访问令牌的更多信息,请参阅使用 客户端注册服务。
运行 kcreg config initial-token --help
和 kcreg config registration-token --help
命令,以了解有关如何使用客户端注册 CLI 配置令牌的更多信息。
11.4.4. 创建客户端配置
使用凭据进行身份验证或配置 Initial Access Token 后的第一项任务通常是创建新客户端。通常,您可能希望使用准备好的 JSON 文件作为模板,并设置或覆盖其中的一些属性。
以下示例演示了如何读取 JSON 文件,覆盖它可能包含的任何客户端 ID,设置任何其他属性,并在成功创建后将配置打印到标准输出。
- Linux:
kcreg.sh create -f client-template.json -s clientId=myclient -s baseUrl=/myclient -s 'redirectUris=["/myclient/*"]' -o
$ kcreg.sh create -f client-template.json -s clientId=myclient -s baseUrl=/myclient -s 'redirectUris=["/myclient/*"]' -o
- Windows:
kcreg create -f client-template.json -s clientId=myclient -s baseUrl=/myclient -s "redirectUris=[\"/myclient/*\"]" -o
C:\> kcreg create -f client-template.json -s clientId=myclient -s baseUrl=/myclient -s "redirectUris=[\"/myclient/*\"]" -o
运行 kcreg create --help
来了解有关 kcreg create
命令的更多信息。
您可以使用 kcreg attrs
来列出可用的属性。请记住,许多配置属性不会检查有效或一致性。您最多可指定正确的值。请记住,您的模板中不应有任何 id 字段,不应将它们指定为 kcreg create
命令的参数。
11.4.5. 检索客户端配置
您可以使用 kcreg get
命令检索现有客户端。
例如,在:
- Linux:
kcreg.sh get myclient
$ kcreg.sh get myclient
- Windows:
kcreg get myclient
C:\> kcreg get myclient
您还可以将客户端配置作为适配器配置文件检索,您可以使用 web 应用程序打包该文件。
例如,在:
- Linux:
kcreg.sh get myclient -e install > keycloak.json
$ kcreg.sh get myclient -e install > keycloak.json
- Windows:
kcreg get myclient -e install > keycloak.json
C:\> kcreg get myclient -e install > keycloak.json
运行 kcreg get --help
命令来了解有关 kcreg get
命令的更多信息。
11.4.6. 修改客户端配置
更新客户端配置的方法有两种。
种方法是在获取当前配置后向服务器提交完整的新状态,将它保存到文件中,编辑文件,并将它回发给服务器。
例如,在:
- Linux:
kcreg.sh get myclient > myclient.json vi myclient.json kcreg.sh update myclient -f myclient.json
$ kcreg.sh get myclient > myclient.json
$ vi myclient.json
$ kcreg.sh update myclient -f myclient.json
- Windows:
kcreg get myclient > myclient.json notepad myclient.json kcreg update myclient -f myclient.json
C:\> kcreg get myclient > myclient.json
C:\> notepad myclient.json
C:\> kcreg update myclient -f myclient.json
第二种方法获取当前客户端、设置或删除字段,并将其重新置于一个步骤中。
例如,在:
- Linux:
kcreg.sh update myclient -s enabled=false -d redirectUris
$ kcreg.sh update myclient -s enabled=false -d redirectUris
- Windows:
kcreg update myclient -s enabled=false -d redirectUris
C:\> kcreg update myclient -s enabled=false -d redirectUris
您还可以使用仅包含要应用更改的文件,因此您不必将太多的值指定为参数。在这种情况下,使用 specify- merge
来告知客户端注册 CLI,而不是将 JSON 文件视为完整、新配置,应该将其视为一组要应用到现有配置的属性。
例如,在:
- Linux:
kcreg.sh update myclient --merge -d redirectUris -f mychanges.json
$ kcreg.sh update myclient --merge -d redirectUris -f mychanges.json
- Windows:
kcreg update myclient --merge -d redirectUris -f mychanges.json
C:\> kcreg update myclient --merge -d redirectUris -f mychanges.json
运行 kcreg update --help
命令来了解有关 kcreg update
命令的更多信息。
11.4.7. 删除客户端配置
使用以下示例删除客户端。
- Linux:
kcreg.sh delete myclient
$ kcreg.sh delete myclient
- Windows:
kcreg delete myclient
C:\> kcreg delete myclient
运行 kcreg delete --help
命令来了解有关 kcreg delete
命令的更多信息。
11.4.8. 刷新无效的注册访问令牌
当使用- no-config
模式执行创建、读取、更新和删除(CRUD)操作时,客户端注册 CLI 无法为您处理注册访问令牌。在这种情况下,可以丢失对客户端最近发布的注册访问令牌的跟踪,因此无法在该客户端上执行任何进一步的 CRUD 操作,而无需使用具有 管理客户端权限的账户 进行身份验证。
如果您有权限,您可以向客户端发出新的注册访问令牌,并将其打印到标准输出或保存到您选择的配置文件中。否则,您必须要求域管理员为客户端发出一个新的注册访问令牌,并将其发送给您。然后,您可以通过 the- token
选项将其传递给任何 CRUD 命令。您还可以使用 kcreg config registration-token
命令将新令牌保存到配置文件中,并让客户端注册 CLI 会自动从那个点处理它。
运行 kcreg update-token --help
命令来了解有关 kcreg update-token
命令的更多信息。