mirror of
				https://github.com/therootcompany/keyfetch.js.git
				synced 2024-11-16 17:29:02 +00:00 
			
		
		
		
	v1.1.5: used cached keys on verify when possible
This commit is contained in:
		
							parent
							
								
									0f0d0807a0
								
							
						
					
					
						commit
						9e5ffd1fc9
					
				
							
								
								
									
										12
									
								
								keyfetch.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								keyfetch.js
									
									
									
									
									
								
							| @ -239,15 +239,19 @@ keyfetch.verify = function (opts) { | ||||
|     var kid = decoded.header.kid; | ||||
|     var iss; | ||||
|     var fetcher; | ||||
|     var fetchOne; | ||||
|     if (!opts.strategy || 'oidc' === opts.strategy) { | ||||
|       iss = decoded.payload.iss; | ||||
|       fetcher = keyfetch.oidcJwks; | ||||
|       fetchOne = keyfetch.oidcJwk; | ||||
|     } else if ('auth0' === opts.strategy || 'well-known' === opts.strategy) { | ||||
|       iss = decoded.payload.iss; | ||||
|       fetcher = keyfetch.wellKnownJwks; | ||||
|       fetchOne = keyfetch.wellKnownJwk; | ||||
|     } else { | ||||
|       iss = opts.strategy; | ||||
|       fetcher = keyfetch.jwks; | ||||
|       fetchOne = keyfetch.jwk; | ||||
|     } | ||||
|     function verify(jwk, payload) { | ||||
|       var alg = 'RSA-SHA' + decoded.header.alg.replace(/[^\d]+/i, ''); | ||||
| @ -256,6 +260,13 @@ keyfetch.verify = function (opts) { | ||||
|         .update(jwt.split('.')[0] + '.' + payload) | ||||
|         .verify(jwk.pem, decoded.signature, 'base64'); | ||||
|     } | ||||
|     if (kid) { | ||||
|       return fetchOne(kid, iss); //.catch(fetchAny);
 | ||||
|     } else { | ||||
|       fetchAny(); | ||||
|     } | ||||
| 
 | ||||
|     function fetchAny() { | ||||
|       return fetcher(iss).then(function (jwks) { | ||||
|         var payload = jwt.split('.')[1]; // as string, as it was signed
 | ||||
|         if (jwks.some(function (jwk) { | ||||
| @ -271,5 +282,6 @@ keyfetch.verify = function (opts) { | ||||
|         } | ||||
|         throw new Error("Retrieved a list of keys, but none of them matched the 'kid' (key id) of the token."); | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user