2017-10-12 24 views
2




J'ai essayé de mettre en œuvre Keycloak, en utilisant l'exemple de here. Sur Node.js ça s'est bien passé, mais j'ai un problème avec Java Spring boot. Après la connexion (sur le frontend), Keycloak renvoie le jeton. Après l'envoi de ce jeton au backend (démarrage de Spring), j'obtiens une erreur "Le type de jeton est incorrect." Bearer "attendu mais" ID "". Après le jeton de décodage je vois que dans le "typ" il y a "ID", mais devrait probablement être "porteur".

Avez-vous une idée de la façon de résoudre ce problème?
Toutes les informations sont ci-dessous:Keycloak Spring boot Erreur: le type de jeton est incorrect. Attendu 'Porteur' mais était 'ID'

Application.java

package bootwildfly; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

@RestController 
class ProductController { 

    @RequestMapping("/hello") 
    public String getProducts(){ 
     return ("Hello, SpringBoot on Wildfly"); 
    } 

    @RequestMapping(path = "/logout") 
    public String logout(HttpServletRequest request) throws ServletException { 
     request.logout(); 
     return "/"; 
    } 
} 

application.properties

keycloak.realm = Openshift-radionica 
keycloak.bearer-only = true 
keycloak.auth-server-url = http://keycloak-sso.***.***/auth 
keycloak.ssl-required = external 
keycloak.resource = client-backend 
server.port=8080 

keycloak.securityConstraints[0].authRoles[0] = user 
keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /hello/* 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>product-app</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>product-app</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <keycloak.version>3.1.0.Final</keycloak.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.keycloak</groupId> 
      <artifactId>keycloak-spring-boot-starter</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.keycloak.bom</groupId> 
       <artifactId>keycloak-adapter-bom</artifactId> 
       <version>3.3.0.CR2</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

Erreur:

2017-10-12 11:08:18.119 ERROR 1 --- [nio-8080-exec-9] o.k.a.BearerTokenRequestAuthenticator : Failed to verify token 
org.keycloak.common.VerificationException: Token type is incorrect. Expected 'Bearer' but was 'ID' 
    at org.keycloak.TokenVerifier$TokenTypeCheck.test(TokenVerifier.java:129) ~[keycloak-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.TokenVerifier.verify(TokenVerifier.java:371) ~[keycloak-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.RSATokenVerifier.verify(RSATokenVerifier.java:89) ~[keycloak-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:56) ~[keycloak-adapter-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.rotation.AdapterRSATokenVerifier.verifyToken(AdapterRSATokenVerifier.java:37) ~[keycloak-adapter-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken(BearerTokenRequestAuthenticator.java:87) ~[keycloak-adapter-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticate(BearerTokenRequestAuthenticator.java:82) ~[keycloak-adapter-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:68) ~[keycloak-adapter-core-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.authenticateInternal(AbstractKeycloakAuthenticatorValve.java:206) ~[spring-boot-container-bundle-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve.authenticate(KeycloakAuthenticatorValve.java:47) [spring-boot-container-bundle-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve.doAuthenticate(KeycloakAuthenticatorValve.java:54) [spring-boot-container-bundle-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:560) [tomcat-embed-core-8.5.14.jar!/:8.5.14] 
    at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:185) ~[spring-boot-container-bundle-3.3.0.CR2.jar!/:3.3.0.CR2] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.14.jar!/:8.5.14] 
+0

Sur le frontend, utilisez-vous également la version 3.3.0.CR2 pour la bibliothèque Keycloak JS? –

+0

J'ai le même problème: ( – Eldar

Répondre

0

Sur le côté client (frontend) j'utilise VueJS VueJS Keycloak. J'ai eu le même problème. Résolu ce problème en changeant src/components/sécurité/header.js

import store from '../../store' 
export default() => { 
    var keycloakAuth = store.getters.SECURITY_AUTH 
    return { 'Authorization': 'Bearer ' + keycloakAuth.idToken } 
} 

de keycloakAuth.idToken à keycloakAuth.token et problème résolu.

+1

Belle prise! Vous devriez ouvrir un problème sur le repo VueJS Keycloak afin que l'auteur puisse résoudre ce problème. –