keycloak - 无法从 json 文件创建复合角色

标签 keycloak keycloak-admin-cli

以下是包含角色描述的 JSON:

      {
    "id": "<role-id>",
    "name": "<role-name>",
    "composite": true,
    "composites": {
      "client": {
        "realm-management": [
          "realm-admin",
          "manage-identity-providers",
          "view-users",
          "view-clients",
          "query-users",
          "manage-authorization",
          "view-events",
          "manage-users",
          "manage-events",
          "view-identity-providers",
          "view-authorization",
          "query-groups",
          "query-realms",
          "query-clients",
          "impersonation",
          "create-client",
          "view-realm",
          "manage-clients",
          "manage-realm"
        ]
      }
    },
    "clientRole": false,
    "containerId": "<realm-id>",
    "attributes": {}
  }

即使它是在 Keycloak 中创建的,当我运行 kcadm.sh get roles/<role-name> 时,它说,它不是复合 Material 。深入挖掘后,我在 Keycloak 日志中发现了以下错误:

ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-15) Uncaught server error: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.keycloak.representations.idm.RoleRepresentation$Composites` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('client')

所以我猜,问题出在“复合 Material ”领域的某个地方。 我展示的文件是通过导出获得的,因此它必须有效

UPD 我用来创建角色的命令是 kcadm.sh create roles -s name=<role-name> -r <realm-name> -f role.json

最佳答案

您可以通过首先创建 .json 来做到这一点(让我们命名为 role.json ),内容如下:

{
  "roles": {
    "realm": [
      {
        "name": "<ROLE_NAME>",
        "composite": true,
        "composites": {
          "client": {
            "realm-management": [
              "realm-admin",
              "view-events",
              "manage-clients",
              "create-client",
              "manage-realm",
              "view-users",
              "manage-identity-providers",
              "manage-users",
              "query-users",
              "view-clients",
              "query-realms",
              "view-authorization",
              "view-realm",
              "query-groups",
              "impersonation",
              "manage-events",
              "manage-authorization",
              "query-clients",
              "view-identity-providers"
            ]
          }
        },
        "clientRole": false,
        "containerId": "Realm",
        "attributes": {}
      }
    ]
  }
}

然后调用./kcadm.sh create partialImport -r <REALM_NAME> -s ifResourceExists=FAIL -o -f role.json

关于keycloak - 无法从 json 文件创建复合角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65302448/

相关文章:

Keycloak 使用管理 cli 创建身份提供者映射器

java - 在 Spring Boot 中导入 jboss ResteasyClient 会导致其无法启动

spring - dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序

jwt - 在 Keycloak 中生成 JWT Token 并获取公钥以在第三方平台上验证 JWT Token

Keycloak admin REST API - 使用刷新 token 创建新的访问 token 而不重新创建刷新 token

java - 如何使用 keycloak 保护 angular/spring 应用程序?

php - 使用 add-user-keycloak.sh 添加新用户时如何验证用户的电子邮件?