jose4j implementiert JWS, JWE, JWK und JWT auf Basis der JDK-eigenen Provider, mit JsonWebSignature zum Signieren und einem mit JwtConsumerBuilder gebauten JwtConsumer für die Prüfung von Signaturen und Claims. Version 0.9.7 bestand den Roundtrip mit HS, RS, PS und ES bei 256/384/512 sowie mit EdDSA; ES256K, Ed25519 und Ed448 sind keine bekannten Algorithmusnamen.
Die Standardeinstellungen blockieren die beiden klassischen Angriffe, lassen den Algorithmus aber offen. none wird abgelehnt ('none' is a blocked algorithm.), sofern Signaturen nicht ausdrücklich abgeschaltet sind, und der Schlüsseltyp muss passen: Ein RS256-Token, geprüft mit einem EC-Schlüssel, und ein HS256-Token mit dem PEM-Text des EC-Schlüssels als Schlüssel scheiterten beide (cannot be used for HMAC verification). Jeden anderen Algorithmus, den der Schlüssel ausführen kann, akzeptiert die Bibliothek jedoch – lege den Algorithmus also mit setJwsAlgorithmConstraints(ConstraintType.PERMIT, ...) fest, wie es das Beispiel tut. Mit einem aus den PEM-Bytes gebauten HmacKey bestand das gefälschte HS256-Token die Prüfung – Schlüssel müssen aus der Konfiguration kommen, nie aus dem, was das Token behauptet.
Schlüssellängen werden durchgesetzt: ES256 lehnt einen P-384-Schlüssel ab (expects a key using P-256 but was P-384), und HS256 lehnte einen 16-Byte-Schlüssel ab, weil RFC 7518 Schlüssel verlangt, die mindestens so lang sind wie die Ausgabe der Hashfunktion. ES256-Signaturen sind das 64 Byte lange rohe r‖s; eine DER-Signatur scheitert mit Invalid JWS Signature – der JWT-Debugger zeigt die Länge.
Bei den Claims fallen die Standardeinstellungen gegensätzlich aus: Die fehlende Toleranz für Uhrenabweichungen (Clock Skew) ist strenger, als die meisten Teams erwarten, das nicht verpflichtende exp dagegen großzügiger. setRequireExpirationTime(), setExpectedIssuer(), setExpectedAudience() und setAllowedClockSkewInSeconds() gehören in jeden Consumer, der Tokens eines anderen Dienstes liest.
Bei verschlüsselten Tokens zeigt der JWE-Inspektor, was ein von jose4j erzeugtes JWE enthält.