@@ -468,6 +468,28 @@ def to_jwt(self, key=None, algorithm="", lev=0, lifetime=0):
468468 _jws = JWS (self .to_json (lev ), alg = algorithm )
469469 return _jws .sign_compact (key )
470470
471+ def _gather_keys (self , keyjar , jwt , header , ** kwargs ):
472+ key = []
473+
474+ if keyjar :
475+ _keys = keyjar .get_jwt_verify_keys (jwt , ** kwargs )
476+ if not _keys :
477+ keyjar .update ()
478+ _keys = keyjar .get_jwt_verify_keys (jwt , ** kwargs )
479+ key .extend (_keys )
480+
481+ if "alg" in header and header ["alg" ] != "none" :
482+ if not key :
483+ if keyjar :
484+ keyjar .update ()
485+ key = keyjar .get_jwt_verify_keys (jwt , ** kwargs )
486+ if not key :
487+ raise MissingSigningKey ("alg=%s" % header ["alg" ])
488+ else :
489+ raise MissingSigningKey ("alg=%s" % header ["alg" ])
490+
491+ return key
492+
471493 def from_jwt (self , txt , keyjar , verify = True , ** kwargs ):
472494 """
473495 Given a signed and/or encrypted JWT, verify its correctness and then
@@ -515,7 +537,6 @@ def from_jwt(self, txt, keyjar, verify=True, **kwargs):
515537 jso = _jwt .payload ()
516538 _header = _jwt .headers
517539
518- key = []
519540 # if "sender" in kwargs:
520541 # key.extend(keyjar.get_verify_key(owner=kwargs["sender"]))
521542
@@ -524,21 +545,13 @@ def from_jwt(self, txt, keyjar, verify=True, **kwargs):
524545 if _header ["alg" ] == "none" :
525546 pass
526547 elif verify :
527- if keyjar :
528- key .extend (keyjar .get_jwt_verify_keys (_jwt , ** kwargs ))
548+ key = self ._gather_keys (keyjar , _jwt , _header , ** kwargs )
529549
530- if "alg" in _header and _header ["alg" ] != "none" :
531- if not key :
532- raise MissingSigningKey ("alg=%s" % _header ["alg" ])
550+ if not key :
551+ raise MissingSigningKey ("alg=%s" % _header ["alg" ])
533552
534553 logger .debug ("Found signing key." )
535- try :
536- _verifier .verify_compact (txt , key )
537- except NoSuitableSigningKeys :
538- if keyjar :
539- keyjar .update ()
540- key = keyjar .get_jwt_verify_keys (_jwt , ** kwargs )
541- _verifier .verify_compact (txt , key )
554+ _verifier .verify_compact (txt , key )
542555
543556 self .jws_header = _jwt .headers
544557 else :
0 commit comments