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

Keycloak 20.0.3报错:未识别字段otpPolicyCodeReusable

问题:Keycloak RealmRepresentation反序列化报错(Unrecognized field "otpPolicyCodeReusable")

使用Keycloak Server和Admin REST Client均为20.0.3版本,执行代码RealmRepresentation realmRepresentation = realmResource.toRepresentation();时,触发如下Jackson反序列化异常:

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "otpPolicyCodeReusable" (class org.keycloak.representations.idm.RealmRepresentation), not marked as ignorable (135 known properties: "userFederationMappers", "rememberMe", "duplicateEmailsAllowed", "adminEventsDetailsEnabled", "users", "clientOfflineSessionMaxLifespan", "webAuthnPolicyRequireResidentKey", "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister", "components", "otpPolicyType", "accessCodeLifespanUserAction", "id", "webAuthnPolicyAttestationConveyancePreference", "enabledEventTypes", "applications", "webAuthnPolicyPasswordlessSignatureAlgorithms", "eventsListeners", "ssoSessionMaxLifespanRememberMe", "defaultDefaultClientScopes", "webAuthnPolicyPasswordlessCreateTimeout", "clientOfflineSessionIdleTimeout", "notBefore", "publicKey", "smtpServer", "clientPolicies", "resetPasswordAllowed", "webAuthnPolicyAvoidSameAuthenticatorRegister", "accessTokenLifespanForImplicitFlow", "webAuthnPolicyPasswordlessUserVerificationRequirement", "clientScopes", "internationalizationEnabled", "defaultRole", "accessTokenLifespan", "passwordCredentialGrantAllowed", "federatedUsers", "applicationScopeMappings" [truncated]])
at [Source: (org.jboss.resteasy.specimpl.AbstractBuiltResponse$InputStreamWrapper); line: 1, column: 1870] (through reference chain: org.keycloak.representations.idm.RealmRepresentation["otpPolicyCodeReusable"])
   at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
   at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1127)
   at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2023)
   at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1700)
   at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1678)
   at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:319)
   at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
   at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
   at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:2025)
   at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1175)
   at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:193)
   at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:101)
   at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:80)
   at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:217)
   ... 136 more 

解决方案

  • 严格对齐依赖版本:检查项目中所有Keycloak相关依赖(如keycloak-admin-client、keycloak-core等)的版本是否完全一致,避免混合版本导致DTO类字段定义不匹配。
  • 确认Server实际版本:登录Keycloak控制台的「关于」页面,验证Server的真实版本——即使你认为是20.0.3,也可能存在后台升级或补丁更新,导致返回的响应包含了20.0.3版本Client未定义的字段。
  • 临时忽略未知字段:若需快速绕过该问题,可配置Jackson忽略反序列化时的未知字段,通过自定义Resteasy客户端实现:
    ResteasyClientBuilder clientBuilder = ResteasyClientBuilder.newBuilder();
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    clientBuilder.register(new ResteasyJackson2Provider(mapper));
    
    Keycloak keycloak = KeycloakBuilder.builder()
            // 填入你的Keycloak配置(服务器地址、客户端ID等)
            .resteasyClient(clientBuilder.build())
            .build();
    
  • 升级客户端版本:如果Server确实已包含otpPolicyCodeReusable字段(该字段是Keycloak 21+版本新增的OTP策略配置项),则需将Admin Client升级到与Server一致的版本,确保DTO类包含对应字段定义。

内容的提问来源于stack exchange,提问作者MMMMMMM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:46:14