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

Validar e Consumir JWT de uma API Externa com Secret diferente

Olá, estou com um problema, estou recebendo uma requisição do tipo POST de uma api externa com um jwt assinado com um secret deles, que por sinal é diferente do que eu uso na minha API. Com isso eu tento fazer o procedimento de dar o Parse, conforme aprendi no curso de spring com o security, mas sempre acontece esse erro: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted. O parse que dou com os JWTs gerados por mim, são validados de boa, porém como estava dizendo, quanto tento com uma Diferente, acontece esse problema. Alguém sabe o que poderia fazer?

3 respostas

Na tentativa de usar na minha API o mesmo secret que a API externa utiliza, ainda continua dando o mesmo erro... Segue o código:

 // Controller
@PostMapping("/cartao/result")
    public ResponseEntity cartaoResult(@RequestBody @Valid DataLoguspay data) {
        System.out.println(data.getData());

        tokenService.getDataApiLogusPay(data.getData());

        return ResponseEntity.ok(data);
    }
//Token Service
public void getDataApiLogusPay(String token) {

        String sec = this.secret;

        try {
            Claims body = Jwts.parser().setSigningKey(sec).parseClaimsJws(token).getBody();
            System.out.println("BODY: " + body.getSubject());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

PS.: O sysout do controller retorna no console o JWT certinho na hora da requisição...

PS².: Se eu checar o JWT que vi pelo sysout na internet e colocar o secret, ele realiza o parse, e ainda afirma que está válido o jwt junto do secret que coloco, mostrando todos os dados.

Oi José,

Você verificou se o algoritmo utilizado pela api externa é o mesmo utilizado na sua aplicação?

No curso foi utilizado o algoritmo HS256.

solução!

Talvez seja um problema por conta da string passada como chave.

Testa assim também:

Jwts.parser().setSigningKey(Base64.getEncoder().encodeToString(sec.getBytes())).parseClaimsJws(token).getBody();

Altere essa linha também no seu código que gera o token.