Package com.nimbusds.jose.jwk
Class JWK
java.lang.Object
com.nimbusds.jose.jwk.JWK
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
ECKey
,OctetKeyPair
,OctetSequenceKey
,RSAKey
The base abstract class for JSON Web Keys (JWKs). It serialises to a JSON
object.
The following JSON object members are common to all JWK types:
kty
(required)use
(optional)key_ops
(optional)kid
(optional)x5u
(optional)x5t
(optional)x5t#S256
(optional)x5c
(optional)exp
(optional)nbf
(optional)iat
(optional)revoked
(optional)getKeyStore()
Example JWK (of the Elliptic Curve type):
{ "kty" : "EC", "crv" : "P-256", "x" : "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", "y" : "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", "use" : "enc", "kid" : "1" }
- Version:
- 2024-10-31
- Author:
- Vladimir Dzhuvinov, Justin Richer, Stefan Larsson
- See Also:
-
Field Summary
-
Constructor Summary
ModifierConstructorDescriptionprotected
JWK
(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, KeyStore ks) Deprecated.protected
JWK
(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, Date exp, Date nbf, Date iat, KeyRevocation revocation, KeyStore ks) Creates a new JSON Web Key (JWK).protected
JWK
(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, Date exp, Date nbf, Date iat, KeyStore ks) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionComputes the SHA-256 thumbprint of this JWK.computeThumbprint
(String hashAlg) Computes the thumbprint of this JWK using the specified hash algorithm.Computes the SHA-256 thumbprint URI of this JWK.boolean
Returns the intended JOSE algorithm (alg
) for this JWK.Returns the expiration time (exp
) if this JWK.Returns the issued-at (iat
) time of this JWK.getKeyID()
Returns the ID (kid
) of this JWK.Returns the operations (key_ops
) for this JWK.Returns the key revocation (revoked
) of this JWK.Returns a reference to the underlying key store.Returns the type (kty
) of this JWK.Returns the use (use
) of this JWK.Returns the not-before (nbf
) of this JWK.Returns the parsed X.509 certificate chain (x5c
) of this JWK.abstract LinkedHashMap<String,
?> Returns the required JWK parameters.Returns the X.509 certificate chain (x5c
) of this JWK.Returns the X.509 certificate SHA-256 thumbprint (x5t#S256
) of this JWK.Deprecated.Returns the X.509 certificate URL (x5u
) of this JWK.int
hashCode()
abstract boolean
Returnstrue
if this JWK contains private or sensitive (non-public) parameters.static JWK
Loads a JWK from the specified JCE key store.static JWK
Parses a JWK from the specified JSON object string representation.static JWK
parse
(X509Certificate cert) static JWK
Parses a JWK from the specified JSON object representation.static JWK
parseFromPEMEncodedObjects
(String pemEncodedObjects) Parses an RSA or EC JWK from the specified string of one or more PEM-encoded object(s): X.509 certificate (PEM header: BEGIN CERTIFICATE) PKCS#1 RSAPublicKey (PEM header: BEGIN RSA PUBLIC KEY) X.509 SubjectPublicKeyInfo (PEM header: BEGIN PUBLIC KEY) PKCS#1 RSAPrivateKey (PEM header: BEGIN RSA PRIVATE KEY) PKCS#8 PrivateKeyInfo (PEM header: BEGIN PRIVATE KEY) matching pair of the abovestatic JWK
parseFromPEMEncodedX509Cert
(String pemEncodedCert) abstract int
size()
Returns the size of this JWK.toECKey()
Casts this JWK to an EC JWK.Returns a JSON object representation of this JWK.Returns the JSON object string representation of this JWK.Casts this JWK to an octet key pair JWK.Casts this JWK to an octet sequence JWK.abstract JWK
Creates a copy of this JWK with all private or sensitive parameters removed.abstract JWK
toRevokedJWK
(KeyRevocation keyRevocation) Creates a copy of this JWK with the specified key revocation.toRSAKey()
Casts this JWK to an RSA JWK.toString()
-
Field Details
-
MIME_TYPE
The MIME type of JWK objects:application/jwk+json; charset=UTF-8
- See Also:
-
-
Constructor Details
-
JWK
@Deprecated protected JWK(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, KeyStore ks) Deprecated.Creates a new JSON Web Key (JWK).- Parameters:
kty
- The key type. Must not benull
.use
- The key use,null
if not specified or if the key is intended for signing as well as encryption.ops
- The key operations,null
if not specified.alg
- The intended JOSE algorithm for the key,null
if not specified.kid
- The key ID,null
if not specified.x5u
- The X.509 certificate URL,null
if not specified.x5t
- The X.509 certificate thumbprint,null
if not specified.x5t256
- The X.509 certificate SHA-256 thumbprint,null
if not specified.x5c
- The X.509 certificate chain,null
if not specified.ks
- Reference to the underlying key store,null
if none.
-
JWK
@Deprecated protected JWK(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, Date exp, Date nbf, Date iat, KeyStore ks) Deprecated.Creates a new JSON Web Key (JWK).- Parameters:
kty
- The key type. Must not benull
.use
- The key use,null
if not specified or if the key is intended for signing as well as encryption.ops
- The key operations,null
if not specified.alg
- The intended JOSE algorithm for the key,null
if not specified.kid
- The key ID,null
if not specified.x5u
- The X.509 certificate URL,null
if not specified.x5t
- The X.509 certificate thumbprint,null
if not specified.x5t256
- The X.509 certificate SHA-256 thumbprint,null
if not specified.x5c
- The X.509 certificate chain,null
if not specified.exp
- The key expiration time,null
if not specified.nbf
- The key not-before time,null
if not specified.iat
- The key issued-at time,null
if not specified.ks
- Reference to the underlying key store,null
if none.
-
JWK
protected JWK(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, Date exp, Date nbf, Date iat, KeyRevocation revocation, KeyStore ks) Creates a new JSON Web Key (JWK).- Parameters:
kty
- The key type. Must not benull
.use
- The key use,null
if not specified or if the key is intended for signing as well as encryption.ops
- The key operations,null
if not specified.alg
- The intended JOSE algorithm for the key,null
if not specified.kid
- The key ID,null
if not specified.x5u
- The X.509 certificate URL,null
if not specified.x5t
- The X.509 certificate thumbprint,null
if not specified.x5t256
- The X.509 certificate SHA-256 thumbprint,null
if not specified.x5c
- The X.509 certificate chain,null
if not specified.exp
- The key expiration time,null
if not specified.nbf
- The key not-before time,null
if not specified.iat
- The key issued-at time,null
if not specified.revocation
- The key revocation,null
if not specified.ks
- Reference to the underlying key store,null
if none.
-
-
Method Details
-
getKeyType
Returns the type (kty
) of this JWK.- Returns:
- The key type.
-
getKeyUse
Returns the use (use
) of this JWK.- Returns:
- The key use,
null
if not specified or if the key is intended for signing as well as encryption.
-
getKeyOperations
Returns the operations (key_ops
) for this JWK.- Returns:
- The key operations,
null
if not specified.
-
getAlgorithm
Returns the intended JOSE algorithm (alg
) for this JWK.- Returns:
- The intended JOSE algorithm,
null
if not specified.
-
getKeyID
Returns the ID (kid
) of this JWK. The key ID can be used to match a specific key. This can be used, for instance, to choose a key within aJWKSet
during key rollover. The key ID may also correspond to a JWS/JWEkid
header parameter value.- Returns:
- The key ID,
null
if not specified.
-
getX509CertURL
Returns the X.509 certificate URL (x5u
) of this JWK.- Returns:
- The X.509 certificate URL,
null
if not specified.
-
getX509CertThumbprint
Deprecated.Returns the X.509 certificate SHA-1 thumbprint (x5t
) of this JWK.- Returns:
- The X.509 certificate SHA-1 thumbprint,
null
if not specified.
-
getX509CertSHA256Thumbprint
Returns the X.509 certificate SHA-256 thumbprint (x5t#S256
) of this JWK.- Returns:
- The X.509 certificate SHA-256 thumbprint,
null
if not specified.
-
getX509CertChain
Returns the X.509 certificate chain (x5c
) of this JWK.- Returns:
- The X.509 certificate chain as a unmodifiable list,
null
if not specified.
-
getParsedX509CertChain
Returns the parsed X.509 certificate chain (x5c
) of this JWK.- Returns:
- The X.509 certificate chain as a unmodifiable list,
null
if not specified.
-
getExpirationTime
Returns the expiration time (exp
) if this JWK.- Returns:
- The expiration time,
null
if not specified.
-
getNotBeforeTime
Returns the not-before (nbf
) of this JWK.- Returns:
- The not-before time,
null
if not specified.
-
getIssueTime
Returns the issued-at (iat
) time of this JWK.- Returns:
- The issued-at time,
null
if not specified.
-
getKeyRevocation
Returns the key revocation (revoked
) of this JWK.- Returns:
- The key revocation,
null
if not specified.
-
getKeyStore
Returns a reference to the underlying key store.- Returns:
- The underlying key store,
null
if none.
-
getRequiredParams
Returns the required JWK parameters. Intended as input for JWK thumbprint computation. See RFC 7638 for more information.- Returns:
- The required JWK parameters, sorted alphanumerically by key name and ready for JSON serialisation.
-
computeThumbprint
Computes the SHA-256 thumbprint of this JWK. See RFC 7638 for more information.- Returns:
- The SHA-256 thumbprint.
- Throws:
JOSEException
- If the SHA-256 hash algorithm is not supported.
-
computeThumbprint
Computes the thumbprint of this JWK using the specified hash algorithm. See RFC 7638 for more information.- Parameters:
hashAlg
- The hash algorithm. Must not benull
.- Returns:
- The SHA-256 thumbprint.
- Throws:
JOSEException
- If the hash algorithm is not supported.
-
computeThumbprintURI
Computes the SHA-256 thumbprint URI of this JWK. See RFC 7638 and draft-ietf-oauth-jwk-thumbprint-uri for more information.- Returns:
- The SHA-256 thumbprint URI.
- Throws:
JOSEException
- If the SHA-256 hash algorithm is not supported.
-
isPrivate
Returnstrue
if this JWK contains private or sensitive (non-public) parameters.- Returns:
true
if this JWK contains private parameters, elsefalse
.
-
toPublicJWK
Creates a copy of this JWK with all private or sensitive parameters removed.- Returns:
- The newly created public JWK, or
null
if none can be created.
-
toRevokedJWK
Creates a copy of this JWK with the specified key revocation.- Parameters:
keyRevocation
- The key revocation. Must not benull
.- Returns:
- The new JWK with the specified revocation.
- Throws:
IllegalStateException
- If the JWK is already revoked.
-
size
Returns the size of this JWK.- Returns:
- The JWK size, in bits.
-
toRSAKey
Casts this JWK to an RSA JWK.- Returns:
- The RSA JWK.
-
toECKey
Casts this JWK to an EC JWK.- Returns:
- The EC JWK.
-
toOctetSequenceKey
Casts this JWK to an octet sequence JWK.- Returns:
- The octet sequence JWK.
-
toOctetKeyPair
Casts this JWK to an octet key pair JWK.- Returns:
- The octet key pair JWK.
-
toJSONObject
Returns a JSON object representation of this JWK. This method is intended to be called from extending classes.Example:
{ "kty" : "RSA", "use" : "sig", "kid" : "fd28e025-8d24-48bc-a51a-e2ffc8bc274b" }
- Returns:
- The JSON object representation.
-
toJSONString
Returns the JSON object string representation of this JWK.- Returns:
- The JSON object string representation.
-
toString
-
parse
Parses a JWK from the specified JSON object string representation. The JWK must be anECKey
, anRSAKey
, or aOctetSequenceKey
.- Parameters:
s
- The JSON object string to parse. Must not benull
.- Returns:
- The JWK.
- Throws:
ParseException
- If the string couldn't be parsed to a supported JWK.
-
parse
Parses a JWK from the specified JSON object representation. The JWK must be anECKey
, anRSAKey
, or aOctetSequenceKey
.- Parameters:
jsonObject
- The JSON object to parse. Must not benull
.- Returns:
- The JWK.
- Throws:
ParseException
- If the JSON object couldn't be parsed to a supported JWK.
-
parse
Parses a publicRSA
orEC JWK
from the specified X.509 certificate. Requires BouncyCastle.Important: The X.509 certificate is not validated!
Sets the following JWK parameters:
- For an EC key the curve is obtained from the subject public key info algorithm parameters.
- The JWK use inferred by
KeyUse.from(java.security.cert.X509Certificate)
. - The JWK ID from the X.509 serial number (in base 10).
- The JWK X.509 certificate chain (this certificate only).
- The JWK X.509 certificate SHA-256 thumbprint.
- Parameters:
cert
- The X.509 certificate. Must not benull
.- Returns:
- The public RSA or EC JWK.
- Throws:
JOSEException
- If parsing failed.
-
parseFromPEMEncodedX509Cert
Parses a publicRSA
orEC JWK
from the specified PEM-encoded X.509 certificate. Requires BouncyCastle.Important: The X.509 certificate is not validated!
Sets the following JWK parameters:
- For an EC key the curve is obtained from the subject public key info algorithm parameters.
- The JWK use inferred by
KeyUse.from(java.security.cert.X509Certificate)
. - The JWK ID from the X.509 serial number (in base 10).
- The JWK X.509 certificate chain (this certificate only).
- The JWK X.509 certificate SHA-256 thumbprint.
- Parameters:
pemEncodedCert
- The PEM-encoded X.509 certificate. Must not benull
.- Returns:
- The public RSA or EC JWK.
- Throws:
JOSEException
- If parsing failed.
-
load
public static JWK load(KeyStore keyStore, String alias, char[] pin) throws KeyStoreException, JOSEException Loads a JWK from the specified JCE key store. The JWK can be a public / privateRSA key
, a public / privateEC key
, or asecret key
. Requires BouncyCastle.Important: The X.509 certificate is not validated!
- Parameters:
keyStore
- The key store. Must not benull
.alias
- The alias. Must not benull
.pin
- The pin to unlock the private key if any, empty ornull
if not required.- Returns:
- The public / private RSA or EC JWK, or secret JWK, or
null
if no key with the specified alias was found. - Throws:
KeyStoreException
- On a key store exception.JOSEException
- If RSA or EC key loading failed.
-
parseFromPEMEncodedObjects
Parses an RSA or EC JWK from the specified string of one or more PEM-encoded object(s):- X.509 certificate (PEM header: BEGIN CERTIFICATE)
- PKCS#1 RSAPublicKey (PEM header: BEGIN RSA PUBLIC KEY)
- X.509 SubjectPublicKeyInfo (PEM header: BEGIN PUBLIC KEY)
- PKCS#1 RSAPrivateKey (PEM header: BEGIN RSA PRIVATE KEY)
- PKCS#8 PrivateKeyInfo (PEM header: BEGIN PRIVATE KEY)
- matching pair of the above
Requires BouncyCastle.
- Parameters:
pemEncodedObjects
- The string of PEM-encoded object(s).- Returns:
- The public / (private) RSA or EC JWK.
- Throws:
JOSEException
- If RSA or EC key parsing failed.
-
equals
-
hashCode
-