@@ -348,61 +348,93 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
348
348
349
349
}
350
350
351
- function downloadPublicKeyIfPossible ( token , callback ) {
352
- var decoded = window . decodeJWT ( token ) ;
353
- if ( decoded . error ) {
354
- console . error ( decoded . error ) ;
355
- callback ( ) ;
356
- return ;
351
+ function setKeyFromX5Claims ( json , callback ) {
352
+ function setKeyFromX5c ( x5c ) {
353
+ if ( ! x5c ) {
354
+ return ;
355
+ }
356
+
357
+ if ( ! ( x5c instanceof Array ) ) {
358
+ x5c = [ x5c ] ;
359
+ }
360
+
361
+ var certChain = '' ;
362
+ x5c . forEach ( function ( cert ) {
363
+ certChain += '-----BEGIN CERTIFICATE-----\n' ;
364
+ certChain += cert + '\n' ;
365
+ certChain += '-----END CERTIFICATE-----\n' ;
366
+ } ) ;
367
+
368
+ var publicKeyElement = $ ( 'textarea[name="public-key"]' ) ;
369
+ publicKeyElement . val ( certChain ) ;
370
+
371
+ var privateKeyElement = $ ( 'textarea[name="private-key"]' ) ;
372
+ privateKeyElement . val ( '' ) ;
373
+
374
+ validateKey . apply ( $ ( 'textarea[name="public-key"]' ) ) ;
357
375
}
358
376
359
- if ( decoded . result . header . alg . indexOf ( 'RS' ) !== 0 ||
360
- ! decoded . result . header . kid ||
361
- ! decoded . result . payload . iss ) {
377
+ if ( json . x5c ) {
378
+ setKeyFromX5c ( json . x5c ) ;
379
+ callback ( ) ;
380
+ } else if ( json . x5u ) {
381
+ $ . get ( json . x5u , function ( data ) {
382
+ setKeyFromX5c ( data ) ;
383
+ callback ( ) ;
384
+ } ) ;
385
+ } else {
362
386
callback ( ) ;
363
- return ;
364
387
}
388
+ }
365
389
366
- var url = decoded . result . payload . iss + '.well-known/jwks.json' ;
390
+ function setKeyFromJwkKeySetUrl ( kid , url , callback ) {
367
391
$ . get ( url , function ( data ) {
368
- try {
369
- if ( ! data . keys || ! ( data . keys instanceof Array ) ) {
370
- callback ( ) ;
392
+ if ( ! data || ! data . keys || ! ( data . keys instanceof Array ) ) {
393
+ callback ( ) ;
394
+ return ;
395
+ }
396
+
397
+ for ( var i = 0 ; i < data . keys . length ; ++ i ) {
398
+ var jwk = data . keys [ i ] ;
399
+ if ( jwk . kid === kid ) {
400
+ setKeyFromX5Claims ( jwk , callback ) ;
371
401
return ;
372
402
}
403
+ }
373
404
374
- for ( var i = 0 ; i < data . keys . length ; ++ i ) {
375
- if ( data . keys [ i ] . kid === decoded . result . header . kid ) {
376
- var x5c = data . keys [ i ] . x5c ;
377
- if ( ! ( x5c instanceof Array ) ) {
378
- x5c = [ x5c ] ;
379
- }
380
-
381
- var certChain = '' ;
382
- x5c . forEach ( function ( cert ) {
383
- certChain += '-----BEGIN CERTIFICATE-----\n' ;
384
- certChain += cert + '\n' ;
385
- certChain += '-----END CERTIFICATE-----\n' ;
386
- } ) ;
387
-
388
- var publicKeyElement = $ ( 'textarea[name="public-key"]' ) ;
389
- publicKeyElement . val ( certChain ) ;
405
+ callback ( ) ;
406
+ } ) ;
407
+ }
390
408
391
- var privateKeyElement = $ ( 'textarea[name="private-key"]' ) ;
392
- privateKeyElement . val ( '' ) ;
409
+ function downloadPublicKeyIfPossible ( token , callback ) {
410
+ var decoded = window . decodeJWT ( token ) ;
411
+ if ( decoded . error ) {
412
+ console . error ( decoded . error ) ;
413
+ callback ( ) ;
414
+ return ;
415
+ }
393
416
394
- break ;
395
- }
396
- }
417
+ var header = decoded . result . header ;
418
+ var payload = decoded . result . payload ;
397
419
398
- validateKey . apply ( $ ( 'textarea[name="public-key"]' ) ) ;
420
+ if ( header . alg . indexOf ( 'RS' ) !== 0 ) {
421
+ callback ( ) ;
422
+ return ;
423
+ }
399
424
400
- callback ( ) ;
401
- } catch ( e ) {
402
- console . error ( e ) ;
403
- callback ( ) ;
404
- }
405
- } ) ;
425
+ if ( header . x5c || header . x5u ) {
426
+ setKeyFromX5Claims ( header , callback ) ;
427
+ } else if ( header . jku ) {
428
+ setKeyFromJwkKeySetUrl ( header . kid , header . jku , callback ) ;
429
+ } else if ( header . jwk ) {
430
+ setKeyFromX5Claims ( header . jwk , callback ) ;
431
+ } else if ( header . kid && payload . iss ) {
432
+ //Auth0-specific scheme
433
+ var url = payload . iss + '.well-known/jwks.json' ;
434
+ setKeyFromJwkKeySetUrl ( header . kid , url , callback ) ;
435
+ } else {
436
+ callback ( ) ;
437
+ }
406
438
}
407
439
408
440
function tokenEditorOnChangeListener ( instance ) {
0 commit comments