Files
2026-04-29 08:17:35 +00:00

54 lines
1.6 KiB
Python

import httpx
import os
import logging
from fastapi import HTTPException, Header
logger = logging.getLogger(__name__)
LITELLM_URL = os.getenv("LITELLM_PROXY_URL", "http://litellm:4000")
MASTER_KEY = os.getenv("LITELLM_MASTER_KEY")
async def verify_api_key(authorization: str = Header(...)) -> dict:
token = authorization.removeprefix("Bearer ")
async with httpx.AsyncClient() as client:
try:
# Master Key nutzen um Key-Info abzufragen
resp = await client.get(
f"{LITELLM_URL}/key/info",
headers={
"Authorization": f"Bearer {MASTER_KEY}"
},
params={"key": token},
timeout=5.0
)
except httpx.RequestError as e:
logger.error(f"LiteLLM nicht erreichbar: {e}")
raise HTTPException(503, f"Auth service unavailable: {e}")
logger.debug(f"LiteLLM Status: {resp.status_code}")
logger.debug(f"LiteLLM Response: {resp.text}")
if resp.status_code == 404:
raise HTTPException(401, "Invalid API Key")
if resp.status_code == 401:
raise HTTPException(401, "Invalid API Key")
if resp.status_code != 200:
raise HTTPException(502, f"Auth service error: {resp.status_code}")
data = resp.json()
user_id = (
data.get("info", {}).get("user_id") or
data.get("user_id")
)
if not user_id:
raise HTTPException(400, "API Key hat keine user_id")
return {
"user_id": user_id,
"token": token,
"key_alias": data.get("info", {}).get("key_alias"),
}