Проверка JWT с использованием jjwt - PullRequest
0 голосов
/ 10 октября 2018

Я сгенерировал ключ RSA, используя keytool.

keytool -genkeypair -alias myAlias -keyalg RSA -dname ... 

создает jks.

Я использую это для подписи ..

String sig = Jwts.builder().setClaims(claims).setIssuedAt(new      
Date(now)).setExpiration(expires.getTime()).signWith(
SignatureAlgorithm.RS256, myKey).compact();

и для проверки ..

Certificate cert = keystore.getCertificate(myAlias);
PublicKey publicKey = cert.getPublicKey();
Jwt jwt = Jwts.parser().setSigningKey(publicKey).require("user",  
"me").require("iotDevice", "123456789").parse(signature);

проверяет нормально.

Я создал открытый ключ для этого сертификата ..

keytool -export -alias myAlias -keystore myKeyStore.jks -file myPem.pem
openssl rsa -in myPem.pem -pubout > myApp.pub

Я загружаю этот открытый ключ для повторной проверки ..

RSAPublicKey getPublicKeyFromString(String key) throws IOException,  
GeneralSecurityException {
    String publicKey = key;
    publicKey = publicKey.replace("-----BEGIN PUBLIC KEY-----\n", "");
    publicKey = publicKey.replace("-----END PUBLIC KEY-----", "");
    publicKey = publicKey.replace("\n", "");
    byte[] encoded = Base64.getDecoder().decode(publicKey);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    RSAPublicKey pubKey = (RSAPublicKey) kf.generatePublic(new 
    X509EncodedKeySpec(encoded));
    return pubKey;
}

PublicKey publicKey2 = getPublicKeyFromString(keyString); // keyString has myApp.pub
Jwt jwt = Jwts.parser().setSigningKey(publicKey2).require("user",  
"me").require("iotDevice", "123456789").parse(signature);

// происходит сбой с сообщением

Подпись JWT не соответствует локально вычисленной подписи.Действительность JWT не может быть подтверждена и ей нельзя доверять.

Любая помощь приветствуется.

Заранее спасибо

...