Skip to content

Commit c311fbe

Browse files
committed
Works with jwk thumbprint and updated tests
1 parent 7c2f2c0 commit c311fbe

6 files changed

Lines changed: 41 additions & 16 deletions

File tree

package-lock.json

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

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"base64url": "^3.0.1",
4949
"isomorphic-webcrypto": "^2.3.2",
5050
"jsonwebtoken": "^8.5.1",
51+
"jwk-thumbprint": "^0.1.3",
5152
"jwk-to-pem": "^2.0.3",
5253
"qs": "^6.9.0",
5354
"whatwg-url": "^7.1.0"

src/DpopAccessToken.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
const { JWT } = require('@solid/jose')
55
const { random } = require('./crypto')
6+
const { jwkThumbprintByEncoding } = require('jwk-thumbprint')
67

78
const DEFAULT_MAX_AGE = 1209600 // Default Access token expiration, in seconds
89
const DEFAULT_SIG_ALGORITHM = 'RS256'
@@ -109,7 +110,9 @@ class DpopAccessToken extends JWT {
109110
scope = code.scope
110111
}
111112

112-
const cnf = request.dpopJwk;
113+
const cnf = {
114+
jkt: jwkThumbprintByEncoding(request.dpopJwk, "SHA-256", 'base64url')
115+
}
113116

114117
const options = { aud, sub, scope, alg, jti, iat, max, cnf }
115118

src/handlers/TokenRequest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class TokenRequest extends BaseRequest {
194194
method = 'clientSecretJWT'
195195
}
196196

197-
if (req.body && req.body.client_id) {
197+
if (req.body && req.body.client_id && !req.body.client_secret) {
198198
method = 'clientId'
199199
}
200200

test/handlers/AuthenticationRequestSpec.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ describe('AuthenticationRequest', () => {
9494
return AuthenticationRequest.handle(req, res, provider)
9595
.then(() => {
9696
let redirectUrl = res._getRedirectUrl()
97-
expect(redirectUrl.startsWith('https://example.com/callback#access_token'))
97+
expect(redirectUrl.startsWith('https://example.com/callback?access_token'))
9898
.to.be.true()
9999

100100
expect(res._getStatusCode()).to.equal(302)
@@ -540,7 +540,7 @@ describe('AuthenticationRequest', () => {
540540
params = { 'redirect_uri': 'https://app.com/callback' }
541541
req = HttpMocks.createRequest({ method: 'GET', query: params })
542542
request = new AuthenticationRequest(req, res, provider)
543-
request.validate(request)
543+
request.validateCommon(request)
544544
})
545545

546546
after(() => {
@@ -561,7 +561,7 @@ describe('AuthenticationRequest', () => {
561561
params = { client_id: 'uuid' }
562562
req = HttpMocks.createRequest({ method: 'GET', query: params })
563563
request = new AuthenticationRequest(req, res, provider)
564-
request.validate(request)
564+
request.validateCommon(request)
565565
})
566566

567567
after(() => {
@@ -584,7 +584,7 @@ describe('AuthenticationRequest', () => {
584584
provider = { host }
585585
request = new AuthenticationRequest(req, res, provider)
586586
request.client = null
587-
request.validate(request)
587+
request.validateCommon(request)
588588
})
589589

590590
after(() => {
@@ -608,7 +608,7 @@ describe('AuthenticationRequest', () => {
608608
provider = { host }
609609
request = new AuthenticationRequest(req, res, provider)
610610
request.client = client
611-
request.validate(request)
611+
request.validateCommon(request)
612612
})
613613

614614
after(() => {
@@ -636,7 +636,7 @@ describe('AuthenticationRequest', () => {
636636
provider = { host }
637637
request = new AuthenticationRequest(req, res, provider)
638638
request.client = client
639-
request.validate(request)
639+
request.validateCommon(request)
640640
})
641641

642642
after(() => {
@@ -668,7 +668,7 @@ describe('AuthenticationRequest', () => {
668668
provider = { host }
669669
request = new AuthenticationRequest(req, res, provider)
670670
request.client = client
671-
request.validate(request)
671+
request.validateCommon(request)
672672
})
673673

674674
after(() => {
@@ -701,7 +701,7 @@ describe('AuthenticationRequest', () => {
701701
provider = { host }
702702
request = new AuthenticationRequest(req, res, provider)
703703
request.client = client
704-
request.validate(request)
704+
request.validateCommon(request)
705705
})
706706

707707
after(() => {
@@ -731,10 +731,11 @@ describe('AuthenticationRequest', () => {
731731
'https://example.com/callback'
732732
]
733733
}
734-
provider = { host }
734+
provider = { host, response_types_supported: ['id_token token'] }
735735
request = new AuthenticationRequest(req, res, provider)
736736
request.client = client
737-
request.validate(request)
737+
request.validateCommon(request)
738+
request.validateLegacyPop(request)
738739
})
739740

740741
after(() => {
@@ -771,7 +772,7 @@ describe('AuthenticationRequest', () => {
771772
}
772773
request = new AuthenticationRequest(req, res, provider)
773774
request.client = client
774-
request.validate(request)
775+
request.validateCommon(request)
775776
})
776777

777778
after(() => {
@@ -810,7 +811,7 @@ describe('AuthenticationRequest', () => {
810811
}
811812
request = new AuthenticationRequest(req, res, provider)
812813
request.client = client
813-
request.validate(request)
814+
request.validateCommon(request)
814815
})
815816

816817
after(() => {
@@ -848,7 +849,7 @@ describe('AuthenticationRequest', () => {
848849
})
849850

850851
it('should return the request', () => {
851-
let result = request.validate(request)
852+
let result = request.validateCommon(request)
852853
expect(result).to.equal(request)
853854
})
854855
})

test/handlers/TokenRequestSpec.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,13 @@ describe('TokenRequest', () => {
531531

532532
let res = {}
533533
let host = {}
534-
let provider = { host, grant_types_supported: ['client_credentials'] }
534+
let provider = {
535+
host,
536+
grant_types_supported: ['client_credentials'],
537+
backend: {
538+
get: async () => {}
539+
}
540+
}
535541

536542
request = new TokenRequest(req, res, provider)
537543
request.authenticateClient(request)

0 commit comments

Comments
 (0)