Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Swagger não reconhece o token passsado

Estou com um problema no swagger, o mesmo não está reconhecendo o token que eu estou passando Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Esse é o erro que está dando na IDE:

Caused by: java.lang.IllegalArgumentException: Illegal base64 character 20
at java.base/java.util.Base64$Decoder.decode0(Base64.java:848) ~[na:na]
at java.base/java.util.Base64$Decoder.decode(Base64.java:566) ~[na:na]
at java.base/java.util.Base64$Decoder.decode(Base64.java:589) ~[na:na]
at com.auth0.jwt.JWTDecoder.<init>(JWTDecoder.java:41) ~[java-jwt-4.2.1.jar:4.2.1]
... 63 common frames omitted

com.auth0.jwt.exceptions.JWTDecodeException: The input is not a valid base 64 encoded string. at com.auth0.jwt.JWTDecoder.(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.alura.ForumHub.domain.infra.security.TokenService.getSubject(TokenService.java:40) ~[classes/:na] at br.alura.ForumHub.domain.infra.security.SecurityFilter.doFilterInternal(SecurityFilter.java:29) ~[classes/:na]

Aqui está falando que o erro se encontra na classe TokenService no método getSubject, porém eu já conferir e não tem nada de errado no código:

```

package br.alura.ForumHub.domain.infra.security;

import br.alura.ForumHub.domain.usuario.Usuario; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTCreationException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service;

import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset;

@Service public class TokenService {

@Value("${api.security.token.secret}")
private String secret;

public String gerarToken(Usuario usuario){

    try {
        var algorithm = Algorithm.HMAC256(secret);
        return JWT.create()
                .withIssuer("API Forum.Hub")
                .withSubject(usuario.getLogin())
                .withExpiresAt(dataExpiracao())
                .sign(algorithm);
    }catch(JWTCreationException exception){
        throw new RuntimeException("erro ao gerar token jwt",exception);
    }
}

public String getSubject(String tokenJWT){
    try {
        var algorithm = Algorithm.HMAC256(secret);
        return JWT.require(algorithm)
                .withIssuer("API Forum.Hub")
                .build()
                .verify(tokenJWT)
                .getSubject();

    }catch(JWTCreationException exception){
        throw new RuntimeException("Token JWT inválido ou expirado!");
    }
}

private Instant dataExpiracao(){
    return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-03:00"));
}

}


E tudo está normal lá no postman, todas as requisições funcionam com o token passado no postman, é apenas no swagger que está dando esse problema
1 resposta
solução!

Achei o erro. No método:

private String recuperarToken(HttpServletRequest request){
        var authorizationHeader = request.getHeader("Authorization");
        if (authorizationHeader!=null){
            return authorizationHeader.replace("Bearer ","");
        }
        return null;
    }

Eu não tinha colocado o espaço no "Bearer ", estava apenas "Bearer" kkkkkk