HyperFlow / backend /api /deps /auth_deps.py
Gaurav711's picture
feat(auth): enterprise dual-token architecture with Redis JTI revocation blacklisting
fae5228 verified
Raw
History Blame Contribute Delete
1.35 kB
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from backend.services.token_manager import TokenManager
security = HTTPBearer(auto_error=False)
# Shared singleton for TokenManager
_token_manager = TokenManager()
def get_token_manager() -> TokenManager:
"""Dependency provider for TokenManager singleton."""
return _token_manager
async def get_current_user(
credentials: HTTPAuthorizationCredentials = Depends(security),
token_mgr: TokenManager = Depends(get_token_manager)
) -> dict:
"""
FastAPI Security Dependency.
Validates Bearer Access Token, verifies signature, token_type=='access',
and checks Redis JTI revocation blacklist.
"""
if not credentials or not credentials.credentials:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Missing Authorization Bearer token header",
headers={"WWW-Authenticate": "Bearer"}
)
token_str = credentials.credentials
try:
payload = token_mgr.verify_access_token(token_str)
return payload
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=str(e),
headers={"WWW-Authenticate": "Bearer"}
)