我在 Keycloak 中创建了要导出的用户和角色。
当我尝试使用 UI 中领域的“导出”按钮导出它们时,我下载了一个 JSON 文件。
但我在导出的文件中找不到任何用户或角色realm.json
如何从 Keycloak 导出包含用户和角色的领域 JSON?
dre*_*ash 12
更新:从Keycloak 17 Quarkus 发行版/auth开始,该路径已被删除。因此,您可能需要从该答案中显示的端点调用中删除 。/auth
您将无法使用导出功能来执行此操作。但是,您可以使用Keycloak Admin REST API获取该信息;要调用该 API,您需要具有适当权限的用户提供的访问令牌。现在,我将使用admin领域中的用户master,但稍后我将解释如何使用另一个用户:
curl https://$KEYCLOAK_HOST/auth/realms/master/protocol/openid-connect/token \
-d "client_id=admin-cli" \
-d "username=$ADMIN_NAME" \
-d "password=$ADMIN_PASSWORD" \
-d "grant_type=password"
Run Code Online (Sandbox Code Playgroud)
您将收到带有管理员令牌的 JSON 响应。access_token从该响应中提取属性值。让我们将其保存在变量中$ACCESS_TOKEN以供以后参考。
要从您的领域获取用户列表$REALM_NAME:
curl -X GET https://$KEYCLOAK_HOST/auth/admin/realms/$REALM_NAME/users \
-H "Content-Type: application/json" \
-H "Authorization: bearer $ACCESS_TOKEN"
Run Code Online (Sandbox Code Playgroud)
要获取领域角色:
curl -X GET https://$KEYCLOAK_HOST/auth/admin/realms/$REALM_NAME/roles \
-H "Content-Type: application/json" \
-H "Authorization: bearer $ACCESS_TOKEN"
Run Code Online (Sandbox Code Playgroud)
现在您只需将来自这些端点的 JSON 响应保存到 JSON 文件中。
分配适当的用户权限
对于那些不想从主管理员用户获取访问令牌的人,您可以从其他用户获取访问令牌,但该用户需要客户端view-users的许可realm-management。为此,您可以:
(旧的 Keycloak 用户界面)
Role Mappingsclient roles选择中realm-managementview-users并点击Add selected(新的Keycloak UI)
Role MappingsAssign roleSearch by role name类型中view-users当按照dreamcrash 的指南导出用户和角色时,您可能希望在一个脚本中实现所有操作:
您可以使用命令行工具jq来集成所有 3 个 JSON 部分:
# define the variables: url, credentials to access REST API, and the realm to export
KEYCLOAK_URL="https://localhost:8080"
KEYCLOAK_REALM="master"
KEYCLOAK_USER="admin"
KEYCLOAK_SECRET="secret"
REALM_NAME="myRealm"
# obtain the access token
ACCESS_TOKEN=$(curl -X POST "${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_REALM}/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=${KEYCLOAK_USER}" \
-d "password=${KEYCLOAK_SECRET}" \
-d "grant_type=password" \
-d 'client_id=admin-cli' \
| jq -r '.access_token')
# export the realm as JSON
curl -X GET "${KEYCLOAK_URL}/auth/admin/realms/${REALM_NAME}"
-H "Accept: application/json" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
> keycloak_${REALM_NAME}_realm.json
# export the users
curl -X GET "${KEYCLOAK_URL}/auth/admin/realms/${REALM_NAME}/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
> keycloak_${REALM_NAME}_users.json
# export the roles
curl -X GET "${KEYCLOAK_URL}/auth/admin/realms/${REALM_NAME}/roles" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
> keycloak_${REALM_NAME}_roles.json
# integrate all 3 using jq's slurp
jq -s '.[0] + {users:.[1], roles:.[2]}' \
keycloak_${REALM_NAME}_realm.json \
keycloak_${REALM_NAME}_users.json \
keycloak_${REALM_NAME}_roles.json \
> keycloak_${REALM_NAME}_realm-incl-users-roles.json
Run Code Online (Sandbox Code Playgroud)
生成的文件keycloak_${REALM_NAME}_realm-incl-users-roles.json可能类似于以下简化示例:
{
"realm": "master",
"users": [
{
"id": "user1"
},
{
"id": "user2"
}
],
"roles": [
{
"id": "role1"
},
{
"id": "role2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15445 次 |
| 最近记录: |