Ich validiere ein JWT-Token von Azure und verwende JJWT. Ich erhalte das Modul und den Exponenten aus dem Schlüsseldokument, das sich auf meine TID bezieht, das sind die Felder n und e. Die Validierung schlägt mit Fehler fehl: Die JWT-Signatur stimmt nicht mit der lokal berechneten Signatur überein. Die JWT-Gültigkeit kann nicht bestätigt werden und sollte nicht vertrauenswürdig sein.So generieren Sie einen RSAPublicKey für die JJWT-RSA-Token-Validierung
Dies ist der Code. Sieht jemand den Fehler, den ich gemacht habe? Der Code läuft bis zur Überprüfung, in der er den Signatur-Mismatch-Fehler auslöst, einwandfrei.
private Claims extractClaimsForRsaSignedJwts(String token, String mod, String exp) {
Claims claims = null;
byte[] modBytes = Base64.decodeBase64(mod.getBytes());
byte[] expBytes = Base64.decodeBase64(exp.getBytes());
BigInteger modulus = new BigInteger(modBytes);
BigInteger exponent = new BigInteger(expBytes);
RSAPublicKeySpec pubKeySpecification = new RSAPublicKeySpec(modulus, exponent);
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA");
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
RSAPublicKey rsaPub = null;
try {
rsaPub = (RSAPublicKey) keyFac.generatePublic(pubKeySpecification);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
JwtParser jwtParser = Jwts.parser().setSigningKey(rsaPub);
try {
claims = jwtParser.parseClaimsJws(token).getBody();
} catch (Exception e) {
// JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
System.out.println("The RSA JWT key validation failed: " + e.getMessage());
}
return claims;
}
Vielen Dank!
Jan