Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions jwt/jwks_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,15 @@ def get_signing_keys(self, refresh: bool = False) -> List[PyJWK]:
signing_keys = [
jwk_set_key
for jwk_set_key in jwk_set.keys
if jwk_set_key.public_key_use in ["sig", None] and jwk_set_key.key_id
if jwk_set_key.public_key_use in ["sig", None]
]

if not signing_keys:
raise PyJWKClientError("The JWKS endpoint did not contain any signing keys")

return signing_keys

def get_signing_key(self, kid: str) -> PyJWK:
def get_signing_key(self, kid: Optional[str]) -> PyJWK:
signing_keys = self.get_signing_keys()
signing_key = self.match_kid(signing_keys, kid)

Expand All @@ -117,7 +117,12 @@ def get_signing_key_from_jwt(self, token: str | bytes) -> PyJWK:
return self.get_signing_key(header.get("kid"))

@staticmethod
def match_kid(signing_keys: List[PyJWK], kid: str) -> Optional[PyJWK]:
def match_kid(signing_keys: List[PyJWK], kid: Optional[str]) -> Optional[PyJWK]:
if kid is None:
if len(signing_keys) == 1:
return signing_keys[0]
else:
return None
signing_key = None

for key in signing_keys:
Expand Down