# -*- coding: utf-8 -*- """ 通用 Internal-Token 认证依赖。 从环境变量 INTERNAL_API_TOKEN 读取期望 token, 供 /api/internal/* 端点使用(不依赖 AIConfig)。 """ from __future__ import annotations import os from fastapi import Header, HTTPException, status def verify_internal_token(authorization: str = Header(...)) -> str: """校验 Internal-Token 认证。 Header 格式:Authorization: Internal-Token {token} """ prefix = "Internal-Token " if not authorization.startswith(prefix): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的认证格式,需要 Internal-Token", ) token = authorization[len(prefix):] if not token: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Token 不能为空", ) expected = os.environ.get("INTERNAL_API_TOKEN", "") if not expected: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="INTERNAL_API_TOKEN 未配置", ) if token != expected: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Token 不匹配", ) return token