Чтобы проверить токен JWT с RSA - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь проверить токен jwt и получаю исключение: Исключение в потоке "main" java.lang.IllegalArgumentException: в настоящее время поддерживаются только данные с закрытым ключом

Любые указатели о том, как проверить токен jwtс открытым ключом?

import org.springframework.security.jwt.JwtHelper;

 public  boolean verify(String jwtToken) {
            ResponseEntity<JwtKey> response = restTemplate.getForEntity(tokenKey, JwtKey.class);
            JwtKey jwtKey = response.getBody();
            Jwt decode = JwtHelper.decode(jwtToken);
            System.out.println(decode);
            System.out.println(decode.getClaims());
            JwtHelper.decodeAndVerify(jwtToken, new RsaVerifier(jwtKey.getValue()));

            return true;
        }

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Наконец, я выбрал следующее решение.

import org.springframework.security.jwt.Jwt;
import org.springframework.security.jwt.JwtHelper;
import org.springframework.security.jwt.crypto.sign.RsaVerifier;
import org.apache.commons.lang.StringUtils;

 public boolean verify(String jwtToken) {
        JWTKey jwtKey = restTemplateManager.getTokenPublicKey();
        try {
            JwtHelper.decodeAndVerify(jwtToken, new RsaVerifier(getRSAPublicKey(jwtKey.getValue())));
        } catch (Exception e) {
            logger.error("Error in verifying token{}", e);
            return false;
        }
        return true;
    }


 private RSAPublicKey getRSAPublicKey(String publicKey) {
        if( StringUtils.isBlank(publicKey)) return null;
        publicKey = sanitaize(publicKey);
        try {
            KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(java.util.Base64.getDecoder().decode(publicKey));
            return (RSAPublicKey) keyFactory.generatePublic(keySpec);
        } catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
            logger.error("Error forming RSA key {}", e);
            throw new GatewayException(e);
        }
    }
0 голосов
/ 07 ноября 2018

Создайте RsaVerifier с открытым ключом:

@Bean RsaVerifier rsaVerifier(){
    Resource resource = new ClassPathResource(pubKeyFilename);
    try {
        String pubKey = IOUtils.toString(resource.getInputStream(), "UTF-8");
        return new RsaVerifier(pubKey);
    } catch (final IOException e) {
        throw new Exception("Cannot get public key to check JWT",e);
    }
}

Используйте его, когда хотите декодировать:

Jwt jwt = JwtHelper.decodeAndVerify(token, rsaVerifier());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...