Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] JWTDecodeException na token JWT

Ola, senhoras e senhoras.

No decorrer do curso, no último vídeo, tive um pequeno problema, pois quando passo um token via Bearer, recebo uma exception onde indica que a entrada está em um formato inválido, sendo essa a exceção:

com.auth0.jwt.exceptions.JWTDecodeException: The input is not a valid base 64 encoded string.
    at com.auth0.jwt.JWTDecoder.<init>(JWTDecoder.java:46) ~[java-jwt-4.2.1.jar:4.2.1]
    at com.auth0.jwt.JWTVerifier.verify(JWTVerifier.java:444) ~[java-jwt-4.2.1.jar:4.2.1]
    at br.com.sdconecta.api.infra.security.TokenService.getSubject(TokenService.java:39) ~[classes/:na]
    at br.com.sdconecta.api.infra.security.SecurityFilter.doFilterInternal(SecurityFilter.java:37) ~[classes/:na]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.3.jar:6.0.3]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.3.jar:6.0.3]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.1.jar:6.0.1]
    at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ...

Alguém também passou por algum erro assim e conseguiu resolver?

Fiz uma breve busca mais cedo e vi uma maneira de se converter esse token para o formato válido, mas ai recebo outra exception:

código:

     var tokenJWT = requestToken(request);
    var enconde = Base64Utils.encodeToString(tokenJWT.getBytes());

e recebo a seguinte exception:

com.auth0.jwt.exceptions.JWTDecodeException: The token was expected to have 3 parts, but got 0.
2 respostas

Oi Matheus!

Posta aqui o código das suas classes TokenService e SecurityFilter.

solução!

Cara, consegui resolver e acabei esquecendo de marcar aqui, quando recebia o token, estava pegando o espaço que ficava entre o Bearer e o token e isso estava invalidando meu token, consegui resolver colocando o metodo .strip() após o replace, ficou assim:

private String requestToken(HttpServletRequest request) {
        var authorizationHeader = request.getHeader("Authorization");

        if (authorizationHeader != null) {
            return authorizationHeader.replace("Bearer", "").strip();
        }

        return null;
    }