2 Commits

Author SHA1 Message Date
1af2e37a7f Merge pull request 'fix: add logging to debug auth issues' (#88) from develop into main
Reviewed-on: #88
2026-03-22 12:03:34 +01:00
fde1867863 fix: add logging to debug auth issues
All checks were successful
CI / backend-tests (push) Successful in 29s
CI / frontend-tests (push) Successful in 28s
2026-03-22 12:01:28 +01:00
2 changed files with 13 additions and 7 deletions

View File

@@ -5,9 +5,11 @@ status: completed
type: bug type: bug
priority: normal priority: normal
created_at: 2026-03-22T10:51:30Z created_at: 2026-03-22T10:51:30Z
updated_at: 2026-03-22T10:52:46Z updated_at: 2026-03-22T10:59:46Z
--- ---
Backend JWKS verification only accepts RS256 algorithm, but Supabase JWT key was switched to ECC P-256 (ES256). This causes 401 errors on all authenticated requests. Fix: accept both RS256 and ES256 in the algorithms list, and update tests accordingly. Backend JWKS verification only accepts RS256 algorithm, but Supabase JWT key was switched to ECC P-256 (ES256). This causes 401 errors on all authenticated requests. Fix: accept both RS256 and ES256 in the algorithms list, and update tests accordingly.
## Summary of Changes\n\nAdded ES256 to the accepted JWT algorithms in `_verify_jwt()` so ECC P-256 keys from Supabase are verified correctly alongside RSA keys. Added corresponding test with EC key fixtures. ## Summary of Changes\n\nAdded ES256 to the accepted JWT algorithms in `_verify_jwt()` so ECC P-256 keys from Supabase are verified correctly alongside RSA keys. Added corresponding test with EC key fixtures.
Deployed to production via PR #86 merge on 2026-03-22.

View File

@@ -1,3 +1,4 @@
import logging
from dataclasses import dataclass from dataclasses import dataclass
from uuid import UUID from uuid import UUID
@@ -12,6 +13,7 @@ from app.core.database import get_session
from app.models.nuzlocke_run import NuzlockeRun from app.models.nuzlocke_run import NuzlockeRun
from app.models.user import User from app.models.user import User
logger = logging.getLogger(__name__)
_jwks_client: PyJWKClient | None = None _jwks_client: PyJWKClient | None = None
@@ -71,12 +73,14 @@ def _verify_jwt(token: str) -> dict | None:
algorithms=["RS256", "ES256"], algorithms=["RS256", "ES256"],
audience="authenticated", audience="authenticated",
) )
except jwt.InvalidTokenError: except jwt.InvalidTokenError as e:
pass logger.warning("JWKS JWT validation failed: %s", e)
except PyJWKClientError: except PyJWKClientError as e:
pass logger.warning("JWKS client error: %s", e)
except PyJWKSetError: except PyJWKSetError as e:
pass logger.warning("JWKS set error: %s", e)
else:
logger.debug("No JWKS client available (SUPABASE_URL not set?)")
return _verify_jwt_hs256(token) return _verify_jwt_hs256(token)