Keycloak Admin Client获取Token报错:Unrecognized field 'access_token'
Keycloak Admin Client 获取访问令牌时Jackson反序列化错误
我在使用Keycloak Admin Client获取访问令牌时遇到Jackson反序列化错误,错误核心是Unrecognized field "access_token":Keycloak返回的JSON包含access_token字段,但org.keycloak.representations.AccessTokenResponse类中没有对应的映射配置(已知字段包括token、tokenType等)。执行以下代码时触发该错误:
// 创建Keycloak客户端 Keycloak keycloak = KeycloakBuilder.builder() .serverUrl(keycloakUrlAuth) .realm(keycloakRealm) .grantType(OAuth2Constants.CLIENT_CREDENTIALS) .clientId(keycloakClientId) .clientSecret(keycloakClientSecret) .build(); // 获取访问令牌 AccessTokenResponse token = keycloak.tokenManager().getAccessToken(); return token.getToken();
完整错误日志:
at [Source: (org.jboss.resteasy.client.jaxrs.internal.ClientResponse$InputStreamWrapper); line: 1, column: 18] (through reference chain: org.keycloak.representations.AccessTokenResponse["access_token"]): javax.ws.rs.client.ResponseProcessingException: javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "access_token" (class org.keycloak.representations.AccessTokenResponse), not marked as ignorable (10 known properties: "tokenType", "notBeforePolicy", "otherClaims", "token", "sessionState", "refreshExpiresIn", "scope", "expiresIn", "refreshToken", "idToken"]) docker-jboss-1 | at [Source: (org.jboss.resteasy.client.jaxrs.internal.ClientResponse$InputStreamWrapper); line: 1, column: 18] (through reference chain: org.keycloak.representations.AccessTokenResponse["access_token"]) docker-jboss-1 | at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:138) docker-jboss-1 | at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:60) docker-jboss-1 | at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:104) docker-jboss-1 | at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) docker-jboss-1 | at com.sun.proxy.$Proxy519.grantToken(Unknown Source) docker-jboss-1 | at org.keycloak.admin.client.token.TokenManager.grantToken(TokenManager.java:99) docker-jboss-1 | at org.keycloak.admin.client.token.TokenManager.getAccessToken(TokenManager.java:75)
项目pom.xml配置:
<properties> <jackson-version>2.13.3</jackson-version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.0.26.Final-redhat-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-cdi</artifactId> <version>3.0.26.Final-redhat-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-multipart-provider</artifactId> <version>3.0.26.Final-redhat-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-cache-core</artifactId> <version>3.1.4.Final</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-base</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>3.0.26.Final-redhat-1</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-core</artifactId> <version>20.0.5</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-adapter-core</artifactId> <version>20.0.5</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-admin-client</artifactId> <version>20.0.5</version> </dependency>
jboss-deployment-structure.xml配置(为适配OpenAPI排除内置Jackson模块,使用自定义版本):
<jboss-deployment-structure> <deployment> <dependencies> <system export="true"> <paths> <path name="sun/reflect"/> </paths> </system> </dependencies> <exclusions> <module name="org.dom4j"/> <module name="com.fasterxml.jackson.core.jackson-core"/> <module name="com.fasterxml.jackson.core.jackson-annotations"/> <module name="com.fasterxml.jackson.core.jackson-databind"/> <module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8"/> <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310"/> <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/> <module name="org.jboss.resteasy.resteasy-jackson2-provider"/> <module name="org.jboss.resteasy.resteasy-jackson-provider"/> </exclusions> </deployment> </jboss-deployment-structure>
我尝试过调整依赖版本、排除冲突依赖等多种方法,但问题仍未解决,恳请大家帮忙。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

