Skip to content
18 changes: 13 additions & 5 deletions src/corbado_python_sdk/services/implementation/session_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from jwt import (
ExpiredSignatureError,
ImmatureSignatureError,
InvalidAlgorithmError,
InvalidSignatureError,
decode,
)
Expand All @@ -16,6 +17,7 @@
)

DEFAULT_SESSION_TOKEN_LENGTH = 300
ALLOWED_ALGS = {"RS256"}


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

# decode short session (jwt) with signing key
try:
payload = decode(jwt=session_token, key=signing_key.key, algorithms=["RS256"])
payload = decode(jwt=session_token, key=signing_key.key, algorithms=list(ALLOWED_ALGS))

# extract information from decoded payload
token_issuer: str = payload.get("iss")
Expand All @@ -104,15 +106,21 @@ def validate_token(self, session_token: StrictStr) -> UserEntity:
)
except ExpiredSignatureError as error:
raise TokenValidationException(
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_INVALID_SIGNATURE.value}",
error_type=ValidationErrorType.CODE_JWT_EXPIRED,
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_EXPIRED.value}",
original_exception=error,
)

except InvalidSignatureError as error:
raise TokenValidationException(
error_type=ValidationErrorType.CODE_JWT_EXPIRED,
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_EXPIRED.value}",
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
message=f"Error occured during token decode: {session_token}. {ValidationErrorType.CODE_JWT_INVALID_SIGNATURE.value}",
original_exception=error,
)
except InvalidAlgorithmError as error:
raise TokenValidationException(
error_type=ValidationErrorType.CODE_JWT_INVALID_SIGNATURE,
message="Algorithm not allowed",
original_exception=error,
)

Expand Down
8 changes: 8 additions & 0 deletions tests/unit/test_session_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
ExpiredSignatureError,
ImmatureSignatureError,
InvalidSignatureError,
InvalidAlgorithmError,
PyJWKClientError,
encode,
)
Expand Down Expand Up @@ -179,6 +180,13 @@ def _provide_jwts(self):
None,
None,
),
# Disallowed algorithm "none"
(
False,
"eyJhbGciOiAibm9uZSIsICJ0eXAiOiAiSldUIiwgImtpZCI6ICJraWQxMjMifQ.eyJpc3MiOiAiaHR0cHM6Ly9hdXRoLmFjbWUuY29tIiwgInN1YiI6ICIxMjM0NSIsICJpYXQiOiAxNzQ5NzI2NjIxLCAiZXhwIjogMTc0OTczMDIyMSwgIm5iZiI6IDE3NDk3MjY2MjF9.",
InvalidAlgorithmError,
'The specified alg value is not allowed',
),
# Success with old Frontend API URL in config (2)
(
True,
Expand Down
Loading