2017-05-19 2 views
0

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

Antwort

0

Ich habe das Problem gefunden! Der BigInteger sollte mit Signum 1 für positive Zahlen konstruiert werden! Jetzt funktioniert der Code wie ein Zauber für die Validierung der AzureAD JWT-Signatur. Dies ist der endgültige Code: Screen Shot Of Code With Correction

Verwandte Themen