Ich versuche JWT Authentifizierung meine Vert.x Anwendung hinzuzufügen und das ist, was ich bisher getan haben:
erzeugte Schlüsselspeicher mit dem folgenden Befehl:Signaturprüfung fehlgeschlagen Vert.x
keytool -genseckey -keystore keystore.jceks -storetype JCEKS -storepass Geheimnis -keyalg HMACSHA256 -keysize 2048 -alias HS256 -keypass Geheimnis
wie es here empfohlen.
Da ist in meiner Startmethode I initialisiert JWTAuth Beispiel:
jwt = JWTAuth.create(vertx, new JsonObject()
.put("keyStore", new JsonObject()
.put("type", "jceks")
.put("path", "keystore.jceks")
.put("password", "secret")));
Und hinzugefügt Handler für api Route:
router.route("/api/create_room")
.blockingHandler(JWTAuthHandler.create(jwt));
Nun, wenn ich eine Anfrage mit einigen Bearer-Token in der Autorisierungs-Senden header ich:
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
ich das Token here getestet haben und es sagt, dass die Unterschrift korrekt verifiziert wird.
Habe ich etwas falsch gemacht? Oder ist es ein Fehler in einer vert.x-Bibliothek?
UPD
private static final String DEFAULT_ALGORITHM = "HMACSHA256";
@Override
public synchronized byte[] sign(byte[] payload) {
SecretKey sk = new SecretKeySpec("secret".getBytes(), DEFAULT_ALGORITHM);
try {
mac.init(sk);
return mac.doFinal(payload);
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
Ich habe, offensichtlich sk zu Testzwecken hinzugefügt. Ich denke, es gibt ein Problem während der Initialisierung cryptoMap
.
Die Token werden mit Spring-Security-JWT erstellt. Der Prozess endet im Grunde mit 'Signer signer = new MacSigner (secret); Jwt jwt = JwtHelper.encode (Inhalt, Unterzeichner); ' Aber ich kenne das Geheimnis, was im Grunde bedeutet, dass ich das Token entschlüsseln kann. Ich habe überprüft, dass das Geheimnis, das beim Signieren des Tokens verwendet wird, dasselbe ist wie beim Überprüfen der Signatur in der vert.x App. –
der Mac wird nicht initialisiert, als ich die 'sign' Methode in der' Crypto' Klasse durch Hinzufügen von 'mac.init (sk); Ich bin nicht so gut in diesem Verschlüsselungskram, kannst du meinen Vorschlag bestätigen? –
Was ist die Variable 'sk'? kannst du deinen modifizierten Code teilen? –