Skip to content

Commit c3ea9f3

Browse files
authored
Merge pull request #17 from corbado/16-optimize-jwt-unit-tests
Optimize JWT Unit tests
2 parents 3ee7a76 + 7a6aed3 commit c3ea9f3

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

src/corbado_python_sdk/services/implementation/session_service.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from jwt import (
33
ExpiredSignatureError,
44
ImmatureSignatureError,
5+
InvalidAlgorithmError,
56
InvalidSignatureError,
67
decode,
78
)
@@ -16,6 +17,7 @@
1617
)
1718

1819
DEFAULT_SESSION_TOKEN_LENGTH = 300
20+
ALLOWED_ALGS = {"RS256"}
1921

2022

2123
class SessionService(BaseModel):
@@ -90,7 +92,7 @@ def validate_token(self, session_token: StrictStr) -> UserEntity:
9092

9193
# decode short session (jwt) with signing key
9294
try:
93-
payload = decode(jwt=session_token, key=signing_key.key, algorithms=["RS256"])
95+
payload = decode(jwt=session_token, key=signing_key.key, algorithms=list(ALLOWED_ALGS))
9496

9597
# extract information from decoded payload
9698
token_issuer: str = payload.get("iss")
@@ -104,15 +106,21 @@ def validate_token(self, session_token: StrictStr) -> UserEntity:
104106
)
105107
except ExpiredSignatureError as error:
106108
raise TokenValidationException(
107-
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
108-
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_INVALID_SIGNATURE.value}",
109+
error_type=ValidationErrorType.CODE_JWT_EXPIRED,
110+
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_EXPIRED.value}",
109111
original_exception=error,
110112
)
111113

112114
except InvalidSignatureError as error:
113115
raise TokenValidationException(
114-
error_type=ValidationErrorType.CODE_JWT_EXPIRED,
115-
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_EXPIRED.value}",
116+
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
117+
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_INVALID_SIGNATURE.value}",
118+
original_exception=error,
119+
)
120+
except InvalidAlgorithmError as error:
121+
raise TokenValidationException(
122+
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
123+
message="Algorithm not allowed",
116124
original_exception=error,
117125
)
118126

tests/unit/test_session_service.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
DecodeError,
99
ExpiredSignatureError,
1010
ImmatureSignatureError,
11+
InvalidAlgorithmError,
1112
InvalidSignatureError,
1213
PyJWKClientError,
1314
encode,
@@ -126,8 +127,10 @@ def _provide_jwts(self):
126127
# JWT signed with wrong algorithm (HS256 instead of RS256)
127128
(
128129
False,
129-
"""eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6
130-
IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.dyt0CoTl4WoVjAHI9Q_CwSKhl6d_9rhM3NrXuJttkao""",
130+
(
131+
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6"
132+
"IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.dyt0CoTl4WoVjAHI9Q_CwSKhl6d_9rhM3NrXuJttkao"
133+
),
131134
PyJWKClientError,
132135
'Unable to find a signing key that matches: "None"',
133136
),
@@ -179,6 +182,14 @@ def _provide_jwts(self):
179182
None,
180183
None,
181184
),
185+
# Disallowed algorithm "none"
186+
(
187+
False,
188+
"eyJhbGciOiAibm9uZSIsICJ0eXAiOiAiSldUIiwgImtpZCI6ICJraWQxMjMifQ.eyJpc3MiOiAiaHR0cHM6"
189+
"Ly9hdXRoLmFjbWUuY29tIiwgInN1YiI6ICIxMjM0NSIsICJpYXQiOiAxNzQ5NzI2NjIxLCAiZXhwIjogMTc0OTczMDIyMSwgIm5iZiI6IDE3NDk3MjY2MjF9.",
190+
InvalidAlgorithmError,
191+
'The specified alg value is not allowed',
192+
),
182193
# Success with old Frontend API URL in config (2)
183194
(
184195
True,

0 commit comments

Comments
 (0)