已部署FastAPI应用无法处理API Key认证问题排查
FastAPI API Key认证异常排查(Replit部署)
我用以下FastAPI代码实现图片上传接口,上传完成后返回图片访问URL。部署在Replit后遇到问题:即使输入正确的令牌,API仍返回"Invalid or missing API Key"错误。认证代码复制自我另一正常运行的项目,目前无法定位问题。要求保留API Key认证方式,不更换其他认证方法。
代码实现
from fastapi import FastAPI, HTTPException, Security, status from fastapi.security import APIKeyHeader from pydantic import BaseModel from pymongo import MongoClient import os import logging app = FastAPI() # Database setup connection_string = os.environ["URI"] client = MongoClient(connection_string) db = client['gpt-4-vision-images'] collection = db['images'] # API Key setup API_KEY = os.environ['API_KEY'] api_keys = [API_KEY] api_key_header = APIKeyHeader(name="access_token", auto_error=False) def get_api_key(api_key_header: str = Security(api_key_header), ) -> str: if api_key_header in api_keys: return api_key_header raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or missing API Key", ) logging.info(f"Expected API Key: {API_KEY}") # Log the expected API key class ImageData(BaseModel): image_data: str image_name: str @app.post('/image/upload') async def upload_image(image_data: ImageData, api_key: str = Security(get_api_key)): collection.insert_one({ 'image_name': image_data.image_name, 'data': image_data.image_data }) return { 'url': f'https://gpt-vision-webserver.replit.app/image/{image_data.image_name}?token={api_key}' } if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
排查建议
- 核对Replit环境变量:确认
API_KEY环境变量无拼写错误、无首尾空格,可重新粘贴正确密钥后保存生效。 - 启用日志调试:添加日志基础配置(如
logging.basicConfig(level=logging.INFO)),确保logging.info能输出预期API Key,验证环境变量读取是否正确。 - 检查请求头:确认请求时的
access_token请求头名称完全匹配(区分大小写),且令牌放在请求头而非查询参数中。 - 本地对比测试:在本地配置相同环境变量运行代码,用Postman/curl测试接口,若本地正常则问题出在Replit部署配置。
- 打印实际接收的令牌:在
get_api_key函数中添加print(f"Received API Key: {api_key_header}"),查看Replit控制台输出,对比收到的令牌与预期值是否一致。
内容的提问来源于stack exchange,提问作者Marcus Peterson
相关产品推荐
相关产品推荐

