Fix access token collision and cross-file username collision
- auth.py: _create_access_token had no jti claim, so two refreshes within the same wall-clock second produced byte-identical access tokens (same failure mode already fixed for refresh tokens earlier) - test_refresh_endpoint.py: usernames (jwttoken, refreshuser, etc.) collided with test_auth_endpoints.py's own test usernames once run in the same pytest session against a shared DB with no per-test isolation -- exactly how run_checkpoint_tests.py invokes pytest. Namespaced this file's usernames with a refep_ prefix. Full backend suite (63 tests) passes clean end-to-end against a real Postgres with real migrations applied.
This commit is contained in:
@@ -66,8 +66,15 @@ class UserResponse(BaseModel):
|
||||
# --- Helpers ---
|
||||
|
||||
def _create_access_token(data: dict) -> str:
|
||||
"""Create a signed access token using RS256."""
|
||||
"""Create a signed access token using RS256.
|
||||
|
||||
Includes a unique ``jti`` claim so that concurrent/same-second calls
|
||||
(e.g. back-to-back /refresh requests) still produce distinct tokens —
|
||||
without it, two tokens minted for the same user within the same
|
||||
second are byte-identical since ``sub``/``exp`` are the only claims.
|
||||
"""
|
||||
to_encode = data.copy()
|
||||
to_encode["jti"] = str(uuid.uuid4())
|
||||
expire = datetime.now(timezone.utc) + timedelta(
|
||||
minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user