JWT no Spring gerado de maneira inválida

Estou tentando gerar um token com o código abaixo, porém quando eu testo ele no site do : https://jwt.io/ ele me diz que o token “Invalid Signature”. Alguém sabe me dizer o que estou fazendo de errado?

@Service
public class GeradorToken {

	public String gerarToken(DtoUsuario usuario) {

		try {
			Algorithm algoritmo = Algorithm.HMAC256("123456");
			return JWT.create()
					.withIssuer("API")
					.withSubject(usuario.getLogin())
					.withExpiresAt(dataExpiracao())
					.sign(algoritmo);

		} catch (JWTCreationException exception) {
			throw new RuntimeException("ERRO AO GERAR O TOKEN JWT", exception);
		}
	}

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

Aumente a chave. Algo como:

"uanhy87q6r47q3yhe4rinahd6q3tr45qrw6duyhnwie**6e78q346tyonp043897ntv7syehd6354w763t46wtjkvnalkiasd6"

Eu só digitei vários caracteres à esmo. Faça a mesma coisa. Verifique se deu certo.

Ainda continuando dando inválido. :confused:

Percebi que o erro não é a geração do token, mas a validação mesmo, neste caso o código da validação é este:

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

	public String getSubject(String tokenJWT) {
		
        try {
                Algorithm hmac256 = Algorithm.HMAC256(token);
                return JWT.require(hmac256)
                          .withIssuer("API")
                          .build()
                          .verify(tokenJWT)
                          .getSubject();
        } catch (JWTVerificationException exception) {
                throw new RuntimeException("Token JWT inválido ou expirado!");
        }
	}
}

a pilha do erro estoura no erro de JWTVerificationException

Esse inválido no site jwt.io é pq vc não colocou a secret ali no canto inferior direito. Coloque a secret primeiro e só depois informe o token para verificar se ele é válido.

Obrigado @Lucas_Camara , no caso percebi no final que o problema realmente não estava na geração do token como você bem observou, mas no fato de que as informações que utilizei para gerar a chave não eram as mesmas que foram utilizadas para validar a chave.

Este era o código de geração do token corrigido.

@Service
public class GeradorToken {
	
	@Value("${api.security.token.secret}")
	private String token;
	
	public String gerarToken() {
		
		try {
			Algorithm algoritmo = Algorithm.HMAC256(token);
			return JWT.create()
					.withIssuer("API")
					.withSubject("ANDERSON")
					.withClaim("Idade do Usuario", 22L)
					.withExpiresAt(dataExpiracao())
					.sign(algoritmo);            
			
		} catch (JWTCreationException exception) {
			
			throw new RuntimeException("ERRO AO GERAR O TOKEN JWT", exception);
		}
	}
	 
	private Instant dataExpiracao() {
		return LocalDateTime.now().plusHours(1).toInstant(ZoneOffset.of("-03:00"));
	}
}

e este é o código da validação do token corrigido.

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

	public Long getSubject(String tokenJWT) {
		
        try {
                Algorithm hmac256 = Algorithm.HMAC256(token);
                
                return JWT.require(hmac256)
                        .withIssuer("API")
                        .withSubject("ANDERSON")
                        .build()
                        .verify(tokenJWT)
                        .getClaim("Idade do Usuario")
                        .asLong();
        } catch (JWTVerificationException exception) {
        		System.out.println("Exception: "+exception.toString());
        		System.out.println("Exception Message: "+exception.getMessage());
                throw new RuntimeException("Token JWT inválido ou expirado!");
        }
	}
}

Agradeço todo apoio.