2016-06-13 9 views
4

Auth0 bietet zwei JWT-Bibliotheken, eine für Knoten: node-jsonwebtoken, und eine für Java: java-jwt. Es turns out, dass java-jwt keine öffentlichen/privaten Schlüsselpaare unterstützt.JWT: jwtk/jjwt mit öffentlichen/privaten Schlüsseln

Eine andere Java-Bibliothek, die jjwt-Bibliothek, beansprucht jedoch, diese Funktion zu unterstützen. Die Dokumentation zeigt jedoch nicht, wie man eigene öffentliche/private Schlüsselpaare in jjwt verwenden kann.

habe ich den privaten/öffentlichen Schlüsselpaar, und benutzte es erfolgreich in Knoten mit node-jsonwebtoken:

var key = fs.readFileSync('private.key'); 
var pem = fs.readFileSync('public.pem'); 

var header = {...}; 
var payload = {...}; 

header.algorithm = "RS256"; 
var message = jsonwebtoken.sign(payload, key, header); 
var decoded = jsonwebtoken.verify(message, pem, {algorithm: "RS256"}); 

Aber ich fand keine Möglichkeit, mit jjwt das gleiche in Java zu tun.

Jeder hat ein funktionierendes Beispiel zur Verwendung von privaten/öffentlichen Schlüsseln für JWT in Java mit jjwt?

+0

FWIW zu unterschreiben: Ich würde raten Sie jose4j zu verwenden , https://bitbucket.org/b_c/jose4j/wiki/Home, die führende Java-Implementierung von JOSE/JWT –

Antwort

1

Hier ist, was ich

erstellen Schlüsselspeicher

keytool -genkey -keyalg RSA -alias selbstsignierten -keystore keystore.jks -storepass Passwort -validity 360 -keysize 2048

gefolgt

Sie können den Schlüsselspeicher aus dem vorhandenen privaten Schlüssel und öffentlichen Schlüssel erstellen. Google es, wie es geht.

Lastschlüsselspeicher

KeyStore ks = KeyStore.getInstance("JKS"); 
    InputStream readStream = // Use file stream to load from file system or class.getResourceAsStream to load from classpath 
    ks.load(readStream, "password".toCharArray()); 
    Key key = ks.getKey("selfsigned", "password".toCharArray()); 
    readStream.close(); 

Verwenden JJwt api die Nachricht

String s = Jwts.builder().setSubject("Abc").signWith(SignatureAlgorithm.RS512, key).compact(); 

Verwendung JJwt api Anspruch die Nachricht

X509Certificate certificate = (X509Certificate) keyEntry.getCertificate(); 
Jwts.parser().setSigningKey(certificate.getPublicKey()).parseClaimsJws(s).getBody().getSubject().equals("Abc"); 
+0

Kannst du bitte klären, wo das ist KeyEntry kommt von? –

+0

'PrivateKeyEntry keyEntry = (PrivateKeyEntry) ks.getKey (" selfsigned "," password ".toCharArray());' –

+0

inkompatible Typen: Schlüssel kann nicht in PrivateKeyEntry konvertiert werden - Ich denke, getKey gibt einen Schlüssel zurück, der nicht in einen PrivateKeyEntry konvertiert werden kann ... :( –