Skip to content

Commit 33022c2

Browse files
Merge commit from fork
This is a bug introduced in version 2.10.0: checking the "iss" claim changed from `isinstance(issuer, list)` to `isinstance(issuer, Sequence)`. ```diff - if isinstance(issuer, list): + if isinstance(issuer, Sequence): if payload["iss"] not in issuer: raise InvalidIssuerError("Invalid issuer") else: ``` Since str is a Sequnce, but not a list, `in` is also used for string comparison. This results in `if "abc" not in "__abcd__":` being checked instead of `if "abc" != "__abc__":`. Co-authored-by: Fabian Badoi <[email protected]>
1 parent 783f324 commit 33022c2

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

jwt/api_jwt.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,11 +419,11 @@ def _validate_iss(self, payload: dict[str, Any], issuer: Any) -> None:
419419
if "iss" not in payload:
420420
raise MissingRequiredClaimError("iss")
421421

422-
if isinstance(issuer, Sequence):
423-
if payload["iss"] not in issuer:
422+
if isinstance(issuer, str):
423+
if payload["iss"] != issuer:
424424
raise InvalidIssuerError("Invalid issuer")
425425
else:
426-
if payload["iss"] != issuer:
426+
if payload["iss"] not in issuer:
427427
raise InvalidIssuerError("Invalid issuer")
428428

429429

tests/test_api_jwt.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,16 @@ def test_raise_exception_token_without_issuer(self, jwt):
464464

465465
assert exc.value.claim == "iss"
466466

467+
def test_rasise_exception_on_partial_issuer_match(self, jwt):
468+
issuer = "urn:expected"
469+
470+
payload = {"iss": "urn:"}
471+
472+
token = jwt.encode(payload, "secret")
473+
474+
with pytest.raises(InvalidIssuerError):
475+
jwt.decode(token, "secret", issuer=issuer, algorithms=["HS256"])
476+
467477
def test_raise_exception_token_without_audience(self, jwt):
468478
payload = {"some": "payload"}
469479
token = jwt.encode(payload, "secret")

0 commit comments

Comments
 (0)