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
public abstract class JWK extends Object implements Serializable
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)getKeyStore()
Example JWK (of the Elliptic Curve type):
{ "kty" : "EC", "crv" : "P-256", "x" : "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", "y" : "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM", "use" : "enc", "kid" : "1" }- Version:
- 2020-02-09
- Author:
- Vladimir Dzhuvinov, Justin Richer, Stefan Larsson
- See Also:
- Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Base64URLcomputeThumbprint()Computes the SHA-256 thumbprint of this JWK.Base64URLcomputeThumbprint(String hashAlg)Computes the thumbprint of this JWK using the specified hash algorithm.booleanequals(Object o)AlgorithmgetAlgorithm()Gets the intended JOSE algorithm (alg) for this JWK.StringgetKeyID()Gets the ID (kid) of this JWK.Set<KeyOperation>getKeyOperations()Gets the operations (key_ops) for this JWK.KeyStoregetKeyStore()Returns a reference to the underlying key store.KeyTypegetKeyType()Gets the type (kty) of this JWK.KeyUsegetKeyUse()Gets the use (use) of this JWK.List<X509Certificate>getParsedX509CertChain()Gets the parsed X.509 certificate chain (x5c) of this JWK.abstract LinkedHashMap<String,?>getRequiredParams()Returns the required JWK parameters.List<Base64>getX509CertChain()Gets the X.509 certificate chain (x5c) of this JWK.Base64URLgetX509CertSHA256Thumbprint()Gets the X.509 certificate SHA-256 thumbprint (x5t#S256) of this JWK.Base64URLgetX509CertThumbprint()Deprecated.URIgetX509CertURL()Gets the X.509 certificate URL (x5u) of this JWK.inthashCode()abstract booleanisPrivate()Returnstrueif this JWK contains private or sensitive (non-public) parameters.static JWKload(KeyStore keyStore, String alias, char[] pin)Loads a JWK from the specified JCE key store.static JWKparse(String s)Parses a JWK from the specified JSON object string representation.static JWKparse(X509Certificate cert)static JWKparse(Map<String,Object> jsonObject)Parses a JWK from the specified JSON object representation.static JWKparseFromPEMEncodedObjects(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 JWKparseFromPEMEncodedX509Cert(String pemEncodedCert)abstract intsize()Returns the size of this JWK.ECKeytoECKey()Casts this JWK to an EC JWK.Map<String,Object>toJSONObject()Returns a JSON object representation of this JWK.StringtoJSONString()Returns the JSON object string representation of this JWK.OctetKeyPairtoOctetKeyPair()Casts this JWK to an octet key pair JWK.OctetSequenceKeytoOctetSequenceKey()Casts this JWK to an octet sequence JWK.abstract JWKtoPublicJWK()Creates a copy of this JWK with all private or sensitive parameters removed.RSAKeytoRSAKey()Casts this JWK to an RSA JWK.StringtoString()
-
-
-
Field Detail
-
MIME_TYPE
public static final String MIME_TYPE
The MIME type of JWK objects:application/jwk+json; charset=UTF-8- See Also:
- Constant Field Values
-
-
Constructor Detail
-
JWK
protected JWK(KeyType kty, KeyUse use, Set<KeyOperation> ops, Algorithm alg, String kid, URI x5u, Base64URL x5t, Base64URL x5t256, List<Base64> x5c, KeyStore ks)
Creates a new JSON Web Key (JWK).- Parameters:
kty- The key type. Must not benull.use- The key use,nullif not specified or if the key is intended for signing as well as encryption.ops- The key operations,nullif not specified.alg- The intended JOSE algorithm for the key,nullif not specified.kid- The key ID,nullif not specified.x5u- The X.509 certificate URL,nullif not specified.x5t- The X.509 certificate thumbprint,nullif not specified.x5t256- The X.509 certificate SHA-256 thumbprint,nullif not specified.x5c- The X.509 certificate chain,nullif not specified.ks- Reference to the underlying key store,nullif none.
-
-
Method Detail
-
getKeyType
public KeyType getKeyType()
Gets the type (kty) of this JWK.- Returns:
- The key type.
-
getKeyUse
public KeyUse getKeyUse()
Gets the use (use) of this JWK.- Returns:
- The key use,
nullif not specified or if the key is intended for signing as well as encryption.
-
getKeyOperations
public Set<KeyOperation> getKeyOperations()
Gets the operations (key_ops) for this JWK.- Returns:
- The key operations,
nullif not specified.
-
getAlgorithm
public Algorithm getAlgorithm()
Gets the intended JOSE algorithm (alg) for this JWK.- Returns:
- The intended JOSE algorithm,
nullif not specified.
-
getKeyID
public String getKeyID()
Gets 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 aJWKSetduring key rollover. The key ID may also correspond to a JWS/JWEkidheader parameter value.- Returns:
- The key ID,
nullif not specified.
-
getX509CertURL
public URI getX509CertURL()
Gets the X.509 certificate URL (x5u) of this JWK.- Returns:
- The X.509 certificate URL,
nullif not specified.
-
getX509CertThumbprint
@Deprecated public Base64URL getX509CertThumbprint()
Deprecated.Gets the X.509 certificate SHA-1 thumbprint (x5t) of this JWK.- Returns:
- The X.509 certificate SHA-1 thumbprint,
nullif not specified.
-
getX509CertSHA256Thumbprint
public Base64URL getX509CertSHA256Thumbprint()
Gets the X.509 certificate SHA-256 thumbprint (x5t#S256) of this JWK.- Returns:
- The X.509 certificate SHA-256 thumbprint,
nullif not specified.
-
getX509CertChain
public List<Base64> getX509CertChain()
Gets the X.509 certificate chain (x5c) of this JWK.- Returns:
- The X.509 certificate chain as a unmodifiable list,
nullif not specified.
-
getParsedX509CertChain
public List<X509Certificate> getParsedX509CertChain()
Gets the parsed X.509 certificate chain (x5c) of this JWK.- Returns:
- The X.509 certificate chain as a unmodifiable list,
nullif not specified.
-
getKeyStore
public KeyStore getKeyStore()
Returns a reference to the underlying key store.- Returns:
- The underlying key store,
nullif none.
-
getRequiredParams
public abstract LinkedHashMap<String,?> 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
public Base64URL computeThumbprint() throws JOSEException
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
public Base64URL computeThumbprint(String hashAlg) throws JOSEException
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.
-
isPrivate
public abstract boolean isPrivate()
Returnstrueif this JWK contains private or sensitive (non-public) parameters.- Returns:
trueif this JWK contains private parameters, elsefalse.
-
toPublicJWK
public abstract JWK toPublicJWK()
Creates a copy of this JWK with all private or sensitive parameters removed.- Returns:
- The newly created public JWK, or
nullif none can be created.
-
size
public abstract int size()
Returns the size of this JWK.- Returns:
- The JWK size, in bits.
-
toOctetSequenceKey
public OctetSequenceKey toOctetSequenceKey()
Casts this JWK to an octet sequence JWK.- Returns:
- The octet sequence JWK.
-
toOctetKeyPair
public OctetKeyPair toOctetKeyPair()
Casts this JWK to an octet key pair JWK.- Returns:
- The octet key pair JWK.
-
toJSONObject
public Map<String,Object> 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
public String toJSONString()
Returns the JSON object string representation of this JWK.- Returns:
- The JSON object string representation.
-
toString
public String toString()
- Overrides:
toStringin classObject- See Also:
toJSONString()
-
parse
public static JWK parse(String s) throws ParseException
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
public static JWK parse(Map<String,Object> jsonObject) throws ParseException
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
public static JWK parse(X509Certificate cert) throws JOSEException
Parses a publicRSAorEC JWKfrom 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
public static JWK parseFromPEMEncodedX509Cert(String pemEncodedCert) throws JOSEException
Parses a publicRSAorEC JWKfrom 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 ornullif not required.- Returns:
- The public / private RSA or EC JWK, or secret JWK, or
nullif no key with the specified alias was found. - Throws:
KeyStoreException- On a key store exception.JOSEException- If RSA or EC key loading failed.
-
parseFromPEMEncodedObjects
public static JWK parseFromPEMEncodedObjects(String pemEncodedObjects) throws JOSEException
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.
-
-