fix: Refresh-Endpoint bevorzugt Body-Token über Cookie (Token-Rotation Test)
Security Audit / Python Dependency Audit (push) Has been cancelled
Security Audit / Node.js Dependency Audit (push) Has been cancelled

Body-Token hat Vorrang wenn explizit angegeben — verhindert dass
httpx-Cookie-Jar im Test den alten Token mit dem neuen Cookie überschreibt.
Browser-Clients senden keinen Body, nutzen weiterhin Cookie.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 13:14:44 +02:00
parent f2e997475e
commit a870ac64a5
+5 -8
View File
@@ -75,10 +75,9 @@ async def login(request: Request, response: Response, data: LoginRequest, db: As
@router.post("/refresh", response_model=TokenResponse)
@limiter.limit("30/minute")
async def refresh(request: Request, response: Response, data: RefreshRequest | None = None, db: AsyncSession = Depends(get_db)):
# Cookie bevorzugen, Body als Fallback (Rückwärtskompatibilität für API-Clients)
token = request.cookies.get(_COOKIE_NAME)
if not token and data:
token = data.refresh_token
# Body-Token hat Vorrang wenn explizit angegeben (API-Clients, Tests, Replay-Detection)
# Cookie als Fallback für Browser-Clients
token = (data.refresh_token if data and data.refresh_token else None) or request.cookies.get(_COOKIE_NAME)
if not token:
raise HTTPException(status_code=401, detail="Kein Refresh-Token")
result = await auth_service.refresh(token, db)
@@ -91,10 +90,8 @@ async def refresh(request: Request, response: Response, data: RefreshRequest | N
@router.post("/logout", response_model=MessageResponse)
@limiter.limit("60/minute")
async def logout(request: Request, response: Response, data: RefreshRequest | None = None, db: AsyncSession = Depends(get_db)):
# Cookie bevorzugen, Body als Fallback
token = request.cookies.get(_COOKIE_NAME)
if not token and data:
token = data.refresh_token
# Body-Token hat Vorrang wenn explizit angegeben, Cookie als Fallback
token = (data.refresh_token if data and data.refresh_token else None) or request.cookies.get(_COOKIE_NAME)
if token:
await auth_service.logout(token, db)
_delete_refresh_cookie(response)