Spaces:
Runtime error
Runtime error
File size: 1,524 Bytes
6d4ec85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from uuid import uuid4
from fastapi import Request
from app.config import config
from app.models.exception import HttpException
def get_task_id(request: Request):
task_id = request.headers.get("x-task-id")
if not task_id:
task_id = uuid4()
return str(task_id)
def get_api_key(request: Request):
# Try multiple ways to get API key
api_key = request.headers.get("x-api-key")
if not api_key:
api_key = request.headers.get("authorization")
if api_key and api_key.startswith("Bearer "):
api_key = api_key[7:] # Remove "Bearer " prefix
return api_key
def verify_token(request: Request):
"""验证API密钥(可选)"""
# Check if API authentication is enabled
api_enabled = config.app.get("api_enabled", True)
configured_api_key = config.app.get("api_key", "")
# If API is disabled or no API key is configured, skip authentication
if not api_enabled or not configured_api_key:
return True
# Get API key from request
provided_api_key = get_api_key(request)
# Verify API key
if not provided_api_key or provided_api_key != configured_api_key:
request_id = get_task_id(request)
# 使用通用错误消息,不暴露系统详细信息
raise HttpException(
task_id=request_id,
status_code=401,
message="Authentication failed. Please provide a valid API key via X-API-Key header or Authorization Bearer token.",
)
return True
|