@@ -5,13 +5,13 @@ import Log from './Log';
55import MetadataService from './MetadataService' ;
66import UserInfoService from './UserInfoService' ;
77import ErrorResponse from './ErrorResponse' ;
8- import JwtUtil from './JwtUtil ' ;
8+ import JoseUtil from './JoseUtil ' ;
99
1010const ProtocolClaims = [ "nonce" , "at_hash" , "iat" , "nbf" , "exp" , "aud" , "iss" , "c_hash" ] ;
1111
1212export default class ResponseValidator {
1313
14- constructor ( settings , MetadataServiceCtor = MetadataService , UserInfoServiceCtor = UserInfoService , jwtUtil = JwtUtil ) {
14+ constructor ( settings , MetadataServiceCtor = MetadataService , UserInfoServiceCtor = UserInfoService , joseUtil = JoseUtil ) {
1515 if ( ! settings ) {
1616 Log . error ( "No settings passed to ResponseValidator" ) ;
1717 throw new Error ( "settings" ) ;
@@ -20,7 +20,7 @@ export default class ResponseValidator {
2020 this . _settings = settings ;
2121 this . _metadataService = new MetadataServiceCtor ( this . _settings ) ;
2222 this . _userInfoService = new UserInfoServiceCtor ( this . _settings ) ;
23- this . _jwtUtil = jwtUtil ;
23+ this . _joseUtil = joseUtil ;
2424 }
2525
2626 validateSigninResponse ( state , response ) {
@@ -56,7 +56,7 @@ export default class ResponseValidator {
5656 Log . warn ( "Response was error" , response . error ) ;
5757 return Promise . reject ( new ErrorResponse ( response ) ) ;
5858 }
59-
59+
6060 return Promise . resolve ( response ) ;
6161 }
6262
@@ -99,10 +99,10 @@ export default class ResponseValidator {
9999 Log . info ( "response is OIDC, processing claims" ) ;
100100
101101 response . profile = this . _filterProtocolClaims ( response . profile ) ;
102-
102+
103103 if ( this . _settings . loadUserInfo && response . access_token ) {
104104 Log . info ( "loading user info" ) ;
105-
105+
106106 return this . _userInfoService . getClaims ( response . access_token ) . then ( claims => {
107107
108108 response . profile = this . _mergeClaims ( response . profile , claims ) ;
@@ -202,7 +202,7 @@ export default class ResponseValidator {
202202 return Promise . reject ( new Error ( "No nonce on state" ) ) ;
203203 }
204204
205- let jwt = this . _jwtUtil . parseJwt ( response . id_token ) ;
205+ let jwt = this . _joseUtil . parseJwt ( response . id_token ) ;
206206 if ( ! jwt || ! jwt . header || ! jwt . payload ) {
207207 Log . error ( "Failed to parse id_token" , jwt ) ;
208208 return Promise . reject ( new Error ( "Failed to parse id_token" ) ) ;
@@ -245,9 +245,9 @@ export default class ResponseValidator {
245245 return Promise . reject ( new Error ( "No key matching kid found in signing keys" ) ) ;
246246 }
247247
248- if ( ! this . _jwtUtil . validateJwt ( response . id_token , key , issuer , audience ) ) {
249- Log . error ( "Signature failed to validate" ) ;
250- return Promise . reject ( new Error ( "Signature failed to validate" ) ) ;
248+ if ( ! this . _validateJwt ( response . id_token , key , issuer , audience ) ) {
249+ Log . error ( "JWT failed to validate" ) ;
250+ return Promise . reject ( new Error ( "JWT failed to validate" ) ) ;
251251 }
252252
253253 response . profile = jwt . payload ;
@@ -256,6 +256,10 @@ export default class ResponseValidator {
256256 } ) ;
257257 }
258258
259+ _validateJwt ( jwt , key , issuer , audience ) {
260+ return this . _joseUtil . validateJwt ( jwt , key , issuer , audience ) ;
261+ }
262+
259263 _validateAccessToken ( response ) {
260264 Log . info ( "ResponseValidator._validateAccessToken" ) ;
261265
@@ -274,7 +278,7 @@ export default class ResponseValidator {
274278 return Promise . reject ( new Error ( "No id_token" ) ) ;
275279 }
276280
277- let jwt = this . _jwtUtil . parseJwt ( response . id_token ) ;
281+ let jwt = this . _joseUtil . parseJwt ( response . id_token ) ;
278282 if ( ! jwt || ! jwt . header ) {
279283 Log . error ( "Failed to parse id_token" , jwt ) ;
280284 return Promise . reject ( new Error ( "Failed to parse id_token" ) ) ;
@@ -299,14 +303,14 @@ export default class ResponseValidator {
299303 }
300304
301305 let sha = "sha" + hashBits ;
302- var hash = this . _jwtUtil . hashString ( response . access_token , sha ) ;
306+ var hash = this . _joseUtil . hashString ( response . access_token , sha ) ;
303307 if ( ! hash ) {
304308 Log . error ( "access_token hash failed:" , sha ) ;
305309 return Promise . reject ( new Error ( "Failed to validate at_hash" ) ) ;
306310 }
307311
308312 var left = hash . substr ( 0 , hash . length / 2 ) ;
309- var left_b64u = this . _jwtUtil . hexToBase64Url ( left ) ;
313+ var left_b64u = this . _joseUtil . hexToBase64Url ( left ) ;
310314 if ( left_b64u !== response . profile . at_hash ) {
311315 Log . error ( "Failed to validate at_hash" , left_b64u , response . profile . at_hash ) ;
312316 return Promise . reject ( new Error ( "Failed to validate at_hash" ) ) ;
0 commit comments