Skip to content
Closed
Changes from 4 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
13 changes: 9 additions & 4 deletions jwt/jwks_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,15 @@
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 @@ -114,10 +114,15 @@
def get_signing_key_from_jwt(self, token: str | bytes) -> PyJWK:
unverified = decode_token(token, options={"verify_signature": False})
header = unverified["header"]
return self.get_signing_key(header.get("kid"))
return self.get_signing_key(header.get("kid", None))

@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]

Check warning on line 123 in jwt/jwks_client.py

View check run for this annotation

Codecov / codecov/patch

jwt/jwks_client.py#L123

Added line #L123 was not covered by tests
else:
return None

Check warning on line 125 in jwt/jwks_client.py

View check run for this annotation

Codecov / codecov/patch

jwt/jwks_client.py#L125

Added line #L125 was not covered by tests
signing_key = None

for key in signing_keys:
Expand Down
Loading