2017-10-12 1 views
2



here의 예제를 사용하여 Keycloak을 구현하려했습니다. Node.js에서 괜찮 았지만 Java Spring 부트에 문제가 있습니다. 로그인 후 (프론트 엔드에서) Keycloak은 토큰을 리턴합니다. 그 토큰을 백엔드 (Spring 부트)에 보낸 후, "토큰 유형이 잘못되었습니다. ''무기명 '이 예상되지만'ID ''라는 오류가 발생합니다. 토큰을 디코딩 한 후에 "typ"에는 "ID"가 있지만 "bearer"여야합니다.

이 문제를 해결하는 방법을 알고 계십니까?
모든 정보는 다음과 같습니다 :Keycloak 스프링 부트 오류 : 토큰 유형이 잘못되었습니다. 예상 'Bearer'이지만 '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> 

오류 :

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

프론트 엔드에서 Keycloak JS 라이브러리 용 버전 3.3.0.CR2도 사용하고 있습니까? –

+0

나는 똑같은 문제가있다 : ( – Eldar

답변

0

클라이언트 측 (프론트 엔드)에서는 VueJS VueJS Keycloak을 사용합니다. 나는 똑같은 문제가 있었다. 변경 SRC/구성 요소/보안/header.js

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

하여이 문제를 해결하고이 문제를 해결.

+1

멋지다! 저자가 이것을 고칠 수 있도록 VueJS Keycloak repo에서 문제를 열어야한다. –

관련 문제