You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Quarkus Keycloak Admin Client为新建用户设置属性不生效的问题求助

Quarkus Keycloak Admin Client为新建用户设置属性不生效的问题求助

我在Quarkus应用里尝试结合Keycloak开发服务来自动化测试,用了这些配置项:

%test.quarkus.oidc.enabled=true
%test.quarkus.keycloak.devservices.enabled=true
%test.quarkus.keycloak.devservices.realm-path=quarkus-realm.json

依赖是这些:

implementation 'io.quarkus:quarkus-oidc'
implementation 'io.quarkus:quarkus-oidc-client'
implementation("io.quarkus:quarkus-keycloak-admin-client")

我的quarkus-realm.json配置如下:

{
  "realm": "quarkus",
  "enabled": true,
  "groups": [
    {
      "name": "AziendaXXX"
    },
    {
      "name": "AziendaYYY"
    }
  ],
  "users": [
    {
      "username": "alice",
      "enabled": true,
      "emailVerified": true,
      "firstName": "Alice",
      "lastName": "Wonderland",
      "credentials": [
        {
          "type": "password",
          "value": "alice"
        }
      ],
      "clientRoles": {
        "realm-management": [
          "view-clients",
          "manage-users",
          "view-users"
        ],
        "front-end": [
          "ADMIN"
        ]
      },
      "groups": [
        "/AziendaXXX",
        "/AziendaYYY"
      ],
      "attributes": {
        "phoneNumber": "1234567890",
        "profilePic": "alice-pic-base64",
        "authType": "keycloak"
      }
    },
    {
      "username": "bob",
      "enabled": true,
      "emailVerified": true,
      "firstName": "Bob",
      "lastName": "Builder",
      "credentials": [
        {
          "type": "password",
          "value": "bob"
        }
      ],
      "clientRoles": {
        "realm-management": [
          "view-clients",
          "manage-users",
          "view-users"
        ],
        "front-end": [
          "ADMIN"
        ]
      },
      "groups": [
        "/AziendaXXX"
      ],
      "attributes": {
        "phoneNumber": "0987654321",
        "profilePic": "bob-pic-base64",
        "authType": "keycloak"
      }
    }
  ],
  "clients": [
    {
      "clientId": "back-end",
      "enabled": true,
      "secret": "xxx",
      "clientAuthenticatorType": "client-secret",
      "redirectUris": [
        "*"
      ],
      "webOrigins": [
        "*"
      ],
      "publicClient": false,
      "protocol": "openid-connect",
      "serviceAccountsEnabled": true,
      "directAccessGrantsEnabled": true
    },
    {
      "clientId": "front-end",
      "enabled": true,
      "publicClient": true,
      "protocol": "openid-connect",
      "redirectUris": [
        "*"
      ],
      "webOrigins": [
        "*"
      ],
      "directAccessGrantsEnabled": true,
      "standardFlowEnabled": true,
      "implicitFlowEnabled": false,
      "serviceAccountsEnabled": false,
      "protocolMappers": [
        {
          "name": "roles",
          "protocol": "openid-connect",
          "protocolMapper": "oidc-usermodel-client-role-mapper",
          "consentRequired": false,
          "config": {
            "multivalued": "true",
            "userinfo.token.claim": "true",
            "id.token.claim": "true",
            "access.token.claim": "true",
            "claim.name": "roles",
            "jsonType.label": "String",
            "client.id": "front-end"
          }
        },
        {
          "name": "groups-to-aziende",
          "protocol": "openid-connect",
          "protocolMapper": "oidc-group-membership-mapper",
          "consentRequired": false,
          "config": {
            "claim.name": "aziende",
            "full.path": "false",
            "id.token.claim": "true",
            "access.token.claim": "true",
            "userinfo.token.claim": "true"
          }
        }
      ]
    }
  ],
  "roles": {
    "client": {
      "front-end": [
        {
          "name": "ADMIN",
          "description": "",
          "composite": false,
          "clientRole": true
        }
      ]
    }
  }
}

现在遇到了一个奇怪的问题:查询已有的用户(比如alice或者bob)时,他们的属性都能正常显示,但当我创建一个新用户,然后用下面的方法设置属性时,新用户的属性始终是null,就好像user.setAttributes(attributes);和userResource.update(user);这两行完全没起作用一样,这是怎么回事呢?

我的设置属性方法代码:

private void setUserAttributes(String userId, Map<String, List<String>> attributes) {

    UserResource userResource = keycloak.realm(realm).users().get(userId);
    UserRepresentation user = userResource.toRepresentation();

    if (attributes != null && !attributes.isEmpty()) {
        user.setAttributes(attributes);
        userResource.update(user);
    }
}

备注:内容来源于stack exchange,提问作者Kambei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:52:57