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

Commit 0843632

Browse files
committed
Fix check_key_availability for jwks keys
Close CZ-NIC#639
1 parent 905554f commit 0843632

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/oic/utils/keyio.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1228,4 +1228,7 @@ def check_key_availability(inst, jwt):
12281228
if _cid not in inst.keyjar:
12291229
cinfo = inst.cdb[_cid]
12301230
inst.keyjar.add_symmetric(_cid, cinfo["client_secret"], ["enc", "sig"])
1231-
inst.keyjar.add(_cid, cinfo["jwks_uri"])
1231+
if cinfo.get("jwks_uri") is not None:
1232+
inst.keyjar.add(_cid, cinfo["jwks_uri"])
1233+
elif cinfo.get("jwks") is not None:
1234+
inst.keyjar.import_jwks(cinfo["jwks"], _cid)

tests/test_keyio.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,22 @@
66
from datetime import timedelta
77
from typing import Any # noqa
88
from typing import Dict # noqa
9+
from unittest import TestCase
10+
from unittest.mock import sentinel
911

1012
import pytest
1113
from freezegun import freeze_time
14+
from jwkest.jws import JWS
1215

1316
from oic.oauth2.message import MissingSigningKey
1417
from oic.oic import AuthorizationResponse
18+
from oic.oic.provider import Provider
1519
from oic.utils.keyio import JWKSError
1620
from oic.utils.keyio import KeyBundle
1721
from oic.utils.keyio import KeyJar
1822
from oic.utils.keyio import RSAKey
1923
from oic.utils.keyio import build_keyjar
24+
from oic.utils.keyio import check_key_availability
2025
from oic.utils.keyio import dump_jwks
2126
from oic.utils.keyio import key_export
2227
from oic.utils.keyio import keybundle_from_local_file
@@ -490,3 +495,35 @@ def test_load_jwks_wrong_argtype():
490495
kj = KeyJar()
491496
with pytest.raises(JWKSError):
492497
kj.import_jwks(JWKS_ERR_1, '')
498+
499+
500+
class TestCheckKeyAvailability(TestCase):
501+
"""Unittests for check_key_availability."""
502+
503+
def setUp(self):
504+
self.server = Provider("example", sentinel.session_db, {}, None, sentinel.userinfo,
505+
sentinel.authz, sentinel.client_authn)
506+
self.jwt = JWS({"iss": "some_cid"}).sign_compact()
507+
508+
def test_none(self):
509+
self.server.cdb["some_cid"] = {"client_secret": "top secret"}
510+
check_key_availability(self.server, self.jwt)
511+
self.assertTrue("some_cid" in self.server.keyjar)
512+
# Two symmetric
513+
self.assertEqual(len(self.server.keyjar["some_cid"]), 2)
514+
515+
def test_jwks(self):
516+
self.server.cdb["some_cid"] = {"client_secret": "top secret",
517+
"jwks": JWK0}
518+
check_key_availability(self.server, self.jwt)
519+
self.assertTrue("some_cid" in self.server.keyjar)
520+
# Two symmetric and one remote
521+
self.assertEqual(len(self.server.keyjar["some_cid"]), 3)
522+
523+
def test_jwks_uri(self):
524+
self.server.cdb["some_cid"] = {"client_secret": "top secret",
525+
"jwks_uri": "https://example.com/key"}
526+
check_key_availability(self.server, self.jwt)
527+
self.assertTrue("some_cid" in self.server.keyjar)
528+
# Two symmetric and one remote
529+
self.assertEqual(len(self.server.keyjar["some_cid"]), 3)

0 commit comments

Comments
 (0)