Skip to content

Commit 85fb56b

Browse files
committed
Use jwks-rsa 2.0.2, with async/await support
This pushes up to declare Node 10+ as a requirement, but we were using that in practice, before, too. jwks-rsa CHANGELOG mentions this upgrade guide: https://github.com/auth0/node-jwks-rsa/blob/master/CHANGELOG.md#migrated-callbacks-to-asyncawait
1 parent ba32dae commit 85fb56b

File tree

6 files changed

+46
-90
lines changed

6 files changed

+46
-90
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ ___
120120
- Improve data consistency in Push and Job Status update (Diamond Lewis) [#7267](https://github.com/parse-community/parse-server/pull/7267)
121121
- Excluding keys that have trailing edges.node when performing GraphQL resolver (Chris Bland) [#7273](https://github.com/parse-community/parse-server/pull/7273)
122122
- Added centralized feature deprecation with standardized warning logs (Manuel Trezza) [#7303](https://github.com/parse-community/parse-server/pull/7303)
123+
- Use jwks-rsa 2.x (Olle Jonsson) [#7305](https://github.com/parse-community/parse-server/pull/7305)
123124
___
124125
## 4.5.0
125126
[Full Changelog](https://github.com/parse-community/parse-server/compare/4.4.0...4.5.0)

package-lock.json

Lines changed: 21 additions & 60 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"graphql-upload": "11.0.0",
4343
"intersect": "1.0.1",
4444
"jsonwebtoken": "8.5.1",
45-
"jwks-rsa": "1.12.3",
45+
"jwks-rsa": "2.0.2",
4646
"ldapjs": "2.2.4",
4747
"lodash": "4.17.21",
4848
"lru-cache": "5.1.1",
@@ -125,7 +125,7 @@
125125
"postinstall": "node -p 'require(\"./postinstall.js\")()'"
126126
},
127127
"engines": {
128-
"node": ">= 8"
128+
"node": ">= 10"
129129
},
130130
"bin": {
131131
"parse-server": "bin/parse-server"

spec/AuthenticationAdapters.spec.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,7 +1327,7 @@ describe('oauth2 auth adapter', () => {
13271327
describe('apple signin auth adapter', () => {
13281328
const apple = require('../lib/Adapters/Auth/apple');
13291329
const jwt = require('jsonwebtoken');
1330-
const util = require('util');
1330+
const jwksClient = require('jwks-rsa');
13311331

13321332
it('(using client id as string) should throw error with missing id_token', async () => {
13331333
try {
@@ -1389,7 +1389,7 @@ describe('apple signin auth adapter', () => {
13891389
const fakeGetSigningKeyAsyncFunction = () => {
13901390
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
13911391
};
1392-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1392+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
13931393

13941394
const result = await apple.validateAuthData(
13951395
{ id: 'the_user_id', token: 'the_token' },
@@ -1405,7 +1405,7 @@ describe('apple signin auth adapter', () => {
14051405
const fakeGetSigningKeyAsyncFunction = () => {
14061406
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
14071407
};
1408-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1408+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
14091409

14101410
try {
14111411
await apple.validateAuthData(
@@ -1442,7 +1442,7 @@ describe('apple signin auth adapter', () => {
14421442
const fakeGetSigningKeyAsyncFunction = () => {
14431443
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
14441444
};
1445-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1445+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
14461446
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
14471447

14481448
const result = await apple.validateAuthData(
@@ -1464,7 +1464,7 @@ describe('apple signin auth adapter', () => {
14641464
const fakeGetSigningKeyAsyncFunction = () => {
14651465
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
14661466
};
1467-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1467+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
14681468
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
14691469

14701470
const result = await apple.validateAuthData(
@@ -1486,7 +1486,7 @@ describe('apple signin auth adapter', () => {
14861486
const fakeGetSigningKeyAsyncFunction = () => {
14871487
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
14881488
};
1489-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1489+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
14901490
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
14911491

14921492
const result = await apple.validateAuthData(
@@ -1506,7 +1506,7 @@ describe('apple signin auth adapter', () => {
15061506
const fakeGetSigningKeyAsyncFunction = () => {
15071507
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
15081508
};
1509-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1509+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
15101510
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
15111511

15121512
try {
@@ -1534,7 +1534,7 @@ describe('apple signin auth adapter', () => {
15341534
const fakeGetSigningKeyAsyncFunction = () => {
15351535
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
15361536
};
1537-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1537+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
15381538
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
15391539

15401540
try {
@@ -1563,7 +1563,7 @@ describe('apple signin auth adapter', () => {
15631563
const fakeGetSigningKeyAsyncFunction = () => {
15641564
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
15651565
};
1566-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1566+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
15671567
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
15681568

15691569
try {
@@ -1635,7 +1635,7 @@ describe('apple signin auth adapter', () => {
16351635
const fakeGetSigningKeyAsyncFunction = () => {
16361636
return { kid: '123', rsaPublicKey: 'the_rsa_public_key' };
16371637
};
1638-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1638+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
16391639
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
16401640

16411641
try {
@@ -1760,7 +1760,7 @@ describe('microsoft graph auth adapter', () => {
17601760
describe('facebook limited auth adapter', () => {
17611761
const facebook = require('../lib/Adapters/Auth/facebook');
17621762
const jwt = require('jsonwebtoken');
1763-
const util = require('util');
1763+
const jwksClient = require('jwks-rsa');
17641764

17651765
// TODO: figure out a way to run this test alongside facebook classic tests
17661766
xit('(using client id as string) should throw error with missing id_token', async () => {
@@ -1831,7 +1831,7 @@ describe('facebook limited auth adapter', () => {
18311831
rsaPublicKey: 'the_rsa_public_key',
18321832
};
18331833
};
1834-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1834+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
18351835

18361836
const result = await facebook.validateAuthData(
18371837
{ id: 'the_user_id', token: 'the_token' },
@@ -1852,7 +1852,7 @@ describe('facebook limited auth adapter', () => {
18521852
rsaPublicKey: 'the_rsa_public_key',
18531853
};
18541854
};
1855-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1855+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
18561856

18571857
try {
18581858
await facebook.validateAuthData(
@@ -1894,7 +1894,7 @@ describe('facebook limited auth adapter', () => {
18941894
rsaPublicKey: 'the_rsa_public_key',
18951895
};
18961896
};
1897-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1897+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
18981898
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
18991899

19001900
const result = await facebook.validateAuthData(
@@ -1921,7 +1921,7 @@ describe('facebook limited auth adapter', () => {
19211921
rsaPublicKey: 'the_rsa_public_key',
19221922
};
19231923
};
1924-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1924+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
19251925
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
19261926

19271927
const result = await facebook.validateAuthData(
@@ -1948,7 +1948,7 @@ describe('facebook limited auth adapter', () => {
19481948
rsaPublicKey: 'the_rsa_public_key',
19491949
};
19501950
};
1951-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1951+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
19521952
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
19531953

19541954
const result = await facebook.validateAuthData(
@@ -1973,7 +1973,7 @@ describe('facebook limited auth adapter', () => {
19731973
rsaPublicKey: 'the_rsa_public_key',
19741974
};
19751975
};
1976-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
1976+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
19771977
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
19781978

19791979
try {
@@ -2006,7 +2006,7 @@ describe('facebook limited auth adapter', () => {
20062006
rsaPublicKey: 'the_rsa_public_key',
20072007
};
20082008
};
2009-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
2009+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
20102010
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
20112011

20122012
try {
@@ -2040,7 +2040,7 @@ describe('facebook limited auth adapter', () => {
20402040
rsaPublicKey: 'the_rsa_public_key',
20412041
};
20422042
};
2043-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
2043+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
20442044
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
20452045

20462046
try {
@@ -2126,7 +2126,7 @@ describe('facebook limited auth adapter', () => {
21262126
rsaPublicKey: 'the_rsa_public_key',
21272127
};
21282128
};
2129-
spyOn(util, 'promisify').and.callFake(() => fakeGetSigningKeyAsyncFunction);
2129+
spyOn(jwksClient, 'getSigningKey').and.callFake(() => fakeGetSigningKeyAsyncFunction);
21302130
spyOn(jwt, 'verify').and.callFake(() => fakeClaim);
21312131

21322132
try {

src/Adapters/Auth/apple.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
const Parse = require('parse/node').Parse;
55
const jwksClient = require('jwks-rsa');
6-
const util = require('util');
76
const jwt = require('jsonwebtoken');
87

98
const TOKEN_ISSUER = 'https://appleid.apple.com';
@@ -16,11 +15,9 @@ const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
1615
cacheMaxAge,
1716
});
1817

19-
const asyncGetSigningKeyFunction = util.promisify(client.getSigningKey);
20-
2118
let key;
2219
try {
23-
key = await asyncGetSigningKeyFunction(keyId);
20+
key = await client.getSigningKey(keyId);
2421
} catch (error) {
2522
throw new Parse.Error(
2623
Parse.Error.OBJECT_NOT_FOUND,

src/Adapters/Auth/facebook.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
const Parse = require('parse/node').Parse;
33
const crypto = require('crypto');
44
const jwksClient = require('jwks-rsa');
5-
const util = require('util');
65
const jwt = require('jsonwebtoken');
76
const httpsRequest = require('./httpsRequest');
87

@@ -58,11 +57,9 @@ const getFacebookKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
5857
cacheMaxAge,
5958
});
6059

61-
const asyncGetSigningKeyFunction = util.promisify(client.getSigningKey);
62-
6360
let key;
6461
try {
65-
key = await asyncGetSigningKeyFunction(keyId);
62+
key = await client.getSigningKey(keyId);
6663
} catch (error) {
6764
throw new Parse.Error(
6865
Parse.Error.OBJECT_NOT_FOUND,

0 commit comments

Comments
 (0)