docs/jwks/local/functions/createLocalJWKSet.md
Support from the community to continue maintaining and improving this module is welcome. If you find the module useful, please consider supporting the project by becoming a sponsor.
āø createLocalJWKSet(jwks): LocalJWKSet
Creates a resolver for a locally available JSON Web Key Set. Selection uses the header's "alg" (Algorithm) and "kid" (Key ID), and respects the JWK's "use" (Public Key Use) and "key_ops" (Key Operations). Exactly one key must match.
If multiple keys match, the thrown util/errors.JWKSMultipleMatchingKeys error exposes an async iterator over the matching keys. The example below shows how to attempt verification with each.
[!NOTE]
Only public signature verification keys are supported, not public encryption keys.
This function is exported (as a named export) from the main 'jose' module entry point as well
as from its subpath export 'jose/jwks/local'.
| Parameter | Type | Description |
|---|---|---|
jwks | JSONWebKeySet | JSON Web Key Set formatted object. |
const JWKS = jose.createLocalJWKSet({
keys: [
{
kty: 'RSA',
e: 'AQAB',
n: '12oBZRhCiZFJLcPg59LkZZ9mdhSMTKAQZYq32k_ti5SBB6jerkh-WzOMAO664r_qyLkqHUSp3u5SbXtseZEpN3XPWGKSxjsy-1JyEFTdLSYe6f9gfrmxkUF_7DTpq0gn6rntP05g2-wFW50YO7mosfdslfrTJYWHFhJALabAeYirYD7-9kqq9ebfFMF4sRRELbv9oi36As6Q9B3Qb5_C1rAzqfao_PCsf9EPsTZsVVVkA5qoIAr47lo1ipfiBPxUCCNSdvkmDTYgvvRm6ZoMjFbvOtgyts55fXKdMWv7I9HMD5HwE9uW839PWA514qhbcIsXEYSFMPMV6fnlsiZvQQ',
alg: 'PS256',
},
{
crv: 'P-256',
kty: 'EC',
x: 'ySK38C1jBdLwDsNWKzzBHqKYEE5Cgv-qjWvorUXk9fw',
y: '_LeQBw07cf5t57Iavn4j-BqJsAD1dpoz8gokd3sBsOo',
alg: 'ES256',
},
],
})
const { payload, protectedHeader } = await jose.jwtVerify(jwt, JWKS, {
issuer: 'urn:example:issuer',
audience: 'urn:example:audience',
})
console.log(protectedHeader)
console.log(payload)
Opting-in to multiple JWKS matches using createLocalJWKSet
const options = {
issuer: 'urn:example:issuer',
audience: 'urn:example:audience',
}
const { payload, protectedHeader } = await jose
.jwtVerify(jwt, JWKS, options)
.catch(async (error) => {
if (error instanceof jose.errors.JWKSMultipleMatchingKeys) {
for await (const publicKey of error) {
try {
return await jose.jwtVerify(jwt, publicKey, options)
} catch (innerError) {
if (innerError instanceof jose.errors.JWSSignatureVerificationFailed) {
continue
}
throw innerError
}
}
throw new jose.errors.JWSSignatureVerificationFailed()
}
throw error
})
console.log(protectedHeader)
console.log(payload)