18.6. realm 操作
创建新域
在 realms
端点上 使用
create 命令创建一个新的启用的域。将属性设置为 realm
并已启用
。
$ kcadm.sh create realms -s realm=demorealm -s enabled=true
默认情况下,Red Hat Single Sign-On 会禁用域。您可以通过启用域来立即进行身份验证。
新对象的描述也可以是 JSON 格式。
$ kcadm.sh create realms -f demorealm.json
您可以使用文件直接向标准输入发送带有 realm 属性的 JSON 文档,或者将文档传送到标准输入。
例如:
- Linux:
$ kcadm.sh create realms -f - << EOF { "realm": "demorealm", "enabled": true } EOF
- Windows:
c:\> echo { "realm": "demorealm", "enabled": true } | kcadm create realms -f -
列出现有域
此命令返回所有域的列表。
$ kcadm.sh get realms
Red Hat Single Sign-On 会过滤服务器中 realm 列表,以返回用户只能看到的域。
所有 realm 属性的列表可以是详细状态,大多数用户对属性子集感兴趣,如 realm 名称和 realm 的已启用状态。您可以使用 --fields
选项指定要返回的属性。
$ kcadm.sh get realms --fields realm,enabled
您可以以逗号分隔的值显示结果。
$ kcadm.sh get realms --fields realm --format csv --noquotes
获取特定域
将 realm 名称附加到集合 URI 以获取单个域。
$ kcadm.sh get realms/master
更新域
当您不想更改所有域属性时,使用
-s
选项为属性设置新值。例如:
$ kcadm.sh update realms/demorealm -s enabled=false
如果要将所有可写属性设置为新值:
-
运行
get
命令。 - 编辑 JSON 文件中的当前值。
重新提交.
例如:
$ kcadm.sh get realms/demorealm > demorealm.json $ vi demorealm.json $ kcadm.sh update realms/demorealm -f demorealm.json
-
运行
删除域
运行以下命令以删除域:
$ kcadm.sh delete realms/demorealm
打开域的所有登录页面选项
将控制特定功能的属性设置为 true
。
例如:
$ kcadm.sh update realms/demorealm -s registrationAllowed=true -s registrationEmailAsUsername=true -s rememberMe=true -s verifyEmail=true -s resetPasswordAllowed=true -s editUsernameAllowed=true
列出域密钥
在目标域的密钥 端点上
使用 get
操作。
$ kcadm.sh get keys -r demorealm
生成新域密钥
在添加新的 RSA 生成的密钥对前,获取目标域的 ID。
例如:
$ kcadm.sh get realms/demorealm --fields id --format csv --noquotes
与
kcadm.sh 获取键 -r demorealm 所发现的那样,添加优先级高于现有提供程序的新密钥
提供程序。例如:
Linux:
$ kcadm.sh create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keySize=["2048"]'
Windows:
c:\> kcadm create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keySize=[\"2048\"]"
将
parentId
属性设置为目标域 ID 的值。现在,新添加的密钥是活动密钥,如
kcadm.sh get keys -r demorealm
所示。
从 Java 密钥存储文件添加新域密钥
添加新密钥提供程序,以添加新密钥对预先准备为 JKS 文件。
例如,在:
Linux:
$ kcadm.sh create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keystore=["/opt/keycloak/keystore.jks"]' -s 'config.keystorePassword=["secret"]' -s 'config.keyPassword=["secret"]' -s 'config.keyAlias=["localhost"]'
Windows:
c:\> kcadm create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keystore=[\"/opt/keycloak/keystore.jks\"]" -s "config.keystorePassword=[\"secret\"]" -s "config.keyPassword=[\"secret\"]" -s "config.keyAlias=[\"localhost\"]"
-
确保更改
密钥存储
的属性值、密钥存储密码
、密钥
密码和别名
以匹配特定的密钥存储。 -
将
parentId
属性设置为目标域 ID 的值。
使键被动或禁用密钥
确定您要进行被动的键。
$ kcadm.sh get keys -r demorealm
-
使用键的
providerId
属性构造端点 URI,如components/PROVIDER_ID
。 执行
更新
。例如:
Linux:
$ kcadm.sh update components/PROVIDER_ID -r demorealm -s 'config.active=["false"]'
Windows:
c:\> kcadm update components/PROVIDER_ID -r demorealm -s "config.active=[\"false\"]"
您可以更新其他关键属性:
-
设置一个一个新的
enabled
值来禁用这个键,如config.enabled=["false"]
。 -
设置一个新的
优先级值
,以更改键的优先级,如config.priority=["110"]
。
删除旧密钥
- 请确定您删除的操作是不活跃的,并禁用了它。这个操作是防止应用程序和用户丢失的现有令牌失败。
确定要删除的密钥。
$ kcadm.sh get keys -r demorealm
使用密钥的
providerId
来执行删除。$ kcadm.sh delete components/PROVIDER_ID -r demorealm
为域配置事件日志
对 events/config
端点使用 update
命令。
eventsListeners
属性包含 EventListenerProviderFactory ID 列表,指定接收事件的所有事件监听程序。属性可用于控制内置事件存储,因此您可以使用 Admin REST API 查询过去的事件。Red Hat Single Sign-On 对服务调用(启用的事件
)的日志记录和管理控制台或 Admin REST API 触发的审计事件具有独立的控制(adminEventsEnabled
)。您可以将 eventsExpiration
事件设置为过期,以防止您的数据库填满。Red Hat Single Sign-On 将 eventsExpiration
设置为生存时间(以秒表示)。
您可以设置一个内置事件监听程序,通过 JBoss-logging 接收所有事件和记录事件。使用 org.keycloak.events
日志记录器,红帽单点登录日志错误事件作为 WARN
,其他事件则作为 DEBUG
。
例如:
- Linux:
$ kcadm.sh update events/config -r demorealm -s 'eventsListeners=["jboss-logging"]'
- Windows:
c:\> kcadm update events/config -r demorealm -s "eventsListeners=[\"jboss-logging\"]"
例如:
您可以为所有可用 ERROR 事件(不包括审计事件)打开存储,以便您可以在管理员 REST 检索事件。
- Linux:
$ kcadm.sh update events/config -r demorealm -s eventsEnabled=true -s 'enabledEventTypes=["LOGIN_ERROR","REGISTER_ERROR","LOGOUT_ERROR","CODE_TO_TOKEN_ERROR","CLIENT_LOGIN_ERROR","FEDERATED_IDENTITY_LINK_ERROR","REMOVE_FEDERATED_IDENTITY_ERROR","UPDATE_EMAIL_ERROR","UPDATE_PROFILE_ERROR","UPDATE_PASSWORD_ERROR","UPDATE_TOTP_ERROR","VERIFY_EMAIL_ERROR","REMOVE_TOTP_ERROR","SEND_VERIFY_EMAIL_ERROR","SEND_RESET_PASSWORD_ERROR","SEND_IDENTITY_PROVIDER_LINK_ERROR","RESET_PASSWORD_ERROR","IDENTITY_PROVIDER_FIRST_LOGIN_ERROR","IDENTITY_PROVIDER_POST_LOGIN_ERROR","CUSTOM_REQUIRED_ACTION_ERROR","EXECUTE_ACTIONS_ERROR","CLIENT_REGISTER_ERROR","CLIENT_UPDATE_ERROR","CLIENT_DELETE_ERROR"]' -s eventsExpiration=172800
- Windows:
c:\> kcadm update events/config -r demorealm -s eventsEnabled=true -s "enabledEventTypes=[\"LOGIN_ERROR\",\"REGISTER_ERROR\",\"LOGOUT_ERROR\",\"CODE_TO_TOKEN_ERROR\",\"CLIENT_LOGIN_ERROR\",\"FEDERATED_IDENTITY_LINK_ERROR\",\"REMOVE_FEDERATED_IDENTITY_ERROR\",\"UPDATE_EMAIL_ERROR\",\"UPDATE_PROFILE_ERROR\",\"UPDATE_PASSWORD_ERROR\",\"UPDATE_TOTP_ERROR\",\"VERIFY_EMAIL_ERROR\",\"REMOVE_TOTP_ERROR\",\"SEND_VERIFY_EMAIL_ERROR\",\"SEND_RESET_PASSWORD_ERROR\",\"SEND_IDENTITY_PROVIDER_LINK_ERROR\",\"RESET_PASSWORD_ERROR\",\"IDENTITY_PROVIDER_FIRST_LOGIN_ERROR\",\"IDENTITY_PROVIDER_POST_LOGIN_ERROR\",\"CUSTOM_REQUIRED_ACTION_ERROR\",\"EXECUTE_ACTIONS_ERROR\",\"CLIENT_REGISTER_ERROR\",\"CLIENT_UPDATE_ERROR\",\"CLIENT_DELETE_ERROR\"]" -s eventsExpiration=172800
您可以将存储的事件类型重置为 所有可用事件类型。将值设为空列表与迭代所有相同。
$ kcadm.sh update events/config -r demorealm -s enabledEventTypes=[]
您可以启用审计事件的存储。
$ kcadm.sh update events/config -r demorealm -s adminEventsEnabled=true -s adminEventsDetailsEnabled=true
您可以得到最后 100 个事件。事件从最新到最旧的排序。
$ kcadm.sh get events --offset 0 --limit 100
您可以删除所有已保存的事件。
$ kcadm delete events
刷新缓存
使用
create
命令和其中一个端点来清除缓存:-
clear-realm-cache
-
clear-user-cache
-
clear-keys-cache
-
将
realm
设置为与目标域相同的值。例如:
$ kcadm.sh create clear-realm-cache -r demorealm -s realm=demorealm $ kcadm.sh create clear-user-cache -r demorealm -s realm=demorealm $ kcadm.sh create clear-keys-cache -r demorealm -s realm=demorealm
从导出的 .json 文件中导入一个域
-
在
partialImport
端点上使用create
命令。 -
将
ifResourceExists
设置为FAIL
、SKIP
或OVERWRITE
。 使用
-f
提交导出的域.json
文件。例如:
$ kcadm.sh create partialImport -r demorealm2 -s ifResourceExists=FAIL -o -f demorealm.json
如果 realm 尚不存在,请首先创建它。
例如:
$ kcadm.sh create realms -s realm=demorealm2 -s enabled=true