Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit 71ff1e2

Browse files
committed
Update keyjar when needed.
1 parent 0a1532f commit 71ff1e2

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

src/oidcmsg/message.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)