Skip to content

Commit d09c28e

Browse files
committed
add JWK support
1 parent f23c531 commit d09c28e

File tree

4 files changed

+39
-12
lines changed

4 files changed

+39
-12
lines changed

src/utils.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ const scheme = joi.object({
1313
secret: joi.string().min(1),
1414
publicKey: joi.alternatives().try(
1515
joi.string().regex(/^-----BEGIN(?: RSA)? PUBLIC KEY-----[\s\S]*-----END(?: RSA)? PUBLIC KEY-----\s?$/ig, 'PEM'),
16-
joi.object().type(Buffer)
16+
joi.object().type(Buffer),
17+
joi.object({
18+
kty: joi.string().required()
19+
}).unknown(true)
1720
),
1821
minTimeBetweenJwksRequests: joi.number().integer().positive().allow(0).default(0),
1922
cache: joi.alternatives().try(joi.object({

test.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

test/fixtures/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ D17VcqTdjlS1Mkr73ZoD1GagWZvuSOaz2P0PhnfapRUF1KkbjjnbyzLpfT8Mgovv
2222
xBQJDIcRYL5oetXu//V5rNAr0na4zMBkPOi3ArpFp+Z4YKulYmSEG//216rLmzjl
2323
WKEkH1OK39jddDrMTidlxDKY+THheyQBPZ6pFfbKEM5281glYjkeQpECAwEAAQ==
2424
-----END RSA PUBLIC KEY-----`
25+
const publicKeyJWK = {
26+
kty: 'RSA',
27+
n: 'ALq_ejKEGv25YOXiRapjf_1eKEIymgSZeihL1khgFYEZtj7JxSswiSvWia1IxE0uO9_8enwB18heUCrp-mrzcaVrNlc8JTuLfAYthKUltsNJXndjs0fzBQmFF9QYNNDly5nYdJL3pgAR10ji-GbOJzfea6--ybHRup7cpVprZ2ZaH8ksC4xa1wdiRabp5eJ-3he8vLw-GcsnL4vsZfjrjAOqqJi0JnyAxdKiYdEDLf8YeggeKKCuWhculRzkVOYEujKEoCe_GT4apimskXelNK4Qzqu21olcpJLUz3QdV_2JTG0B6J8qmdM9rIe3u6Ja6FHRNRbA4tEncVdmc733_CCD0hk--IELmlOG7qFVKTI0nVw3ycPZuIv5obGcF9fzFFPDqtQLAR3YE5DVWlcBXOmewKiUhlv5sTCkKrKTq_vwQDPKZ8OQQkf0Z2QSXzIwGIkoeq1WLhFlAQS4GViETQDMkcEvDrVsQA3zgbVcJ_H5sPLHIa6PVw9e1XKk3Y5UtTJK-92aA9RmoFmb7kjms9j9D4Z32qUVBdSpG44528sy6X0_DIKL78QUCQyHEWC-aHrV7v_1eazQK9J2uMzAZDzotwK6RafmeGCrpWJkhBv_9teqy5s45VihJB9Tit_Y3XQ6zE4nZcQymPkx4XskAT2eqRX2yhDOdvNYJWI5HkKR',
28+
e: 'AQAB'
29+
}
2530

2631
/**
2732
* @type Object
@@ -44,6 +49,7 @@ const clientConfig = {
4449
const common = Object.assign({}, clientConfig, {
4550
publicKey,
4651
publicKeyBuffer,
52+
publicKeyJWK,
4753
baseUrl,
4854
token,
4955
realmPath,

test/utils.spec.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,10 @@ test('throw error if options are invalid – publicKey', (t) => {
125125
false,
126126
[],
127127
new RegExp(),
128-
{}
128+
{},
129+
{
130+
foobar: 42
131+
}
129132
]
130133

131134
t.plan(invalids.length)
@@ -339,3 +342,28 @@ test('throw no error if options are valid – publicKey/Buffer/string', (t) => {
339342
Error, helpers.log('valid.publicKey.Buffer.string', valid))
340343
})
341344
})
345+
346+
test('throw no error if options are valid – publicKey/JWK', (t) => {
347+
const valids = [
348+
{},
349+
{ cache: {} },
350+
{ cache: { segment: 'foobar' } },
351+
{ cache: true },
352+
{ cache: false },
353+
{ userInfo: [] },
354+
{ userInfo: ['string'] },
355+
{ minTimeBetweenJwksRequests: 0 },
356+
{ minTimeBetweenJwksRequests: 42 }
357+
]
358+
359+
t.plan(valids.length)
360+
361+
valids.forEach((valid) => {
362+
t.notThrows(
363+
() => utils.verify(helpers.getOptions(Object.assign({
364+
secret: undefined,
365+
publicKey: fixtures.common.publicKeyJWK
366+
}, valid))),
367+
Error, helpers.log('valid.publicKey.JWK', valid))
368+
})
369+
})

0 commit comments

Comments
 (0)