在FastAPI中,可以通过自定义安全机制来定义多个API密钥。以下是一种实现方式:
from fastapi import FastAPI, HTTPException, Security
from fastapi.security.api_key import APIKeyQuery, APIKeyCookie, APIKeyHeader
from starlette.status import HTTP_403_FORBIDDEN
app = FastAPI()
API_KEY_1 = "your_api_key_1"
API_KEY_2 = "your_api_key_2"
api_key_query = APIKeyQuery(name="api_key")
api_key_cookie = APIKeyCookie(name="api_key")
api_key_header = APIKeyHeader(name="api_key")
async def get_api_key(api_key_query: str = Security(api_key_query),
api_key_cookie: str = Security(api_key_cookie),
api_key_header: str = Security(api_key_header)):
if api_key_query == API_KEY_1 or api_key_cookie == API_KEY_1 or api_key_header == API_KEY_1:
return "API Key 1"
elif api_key_query == API_KEY_2 or api_key_cookie == API_KEY_2 or api_key_header == API_KEY_2:
return "API Key 2"
else:
raise HTTPException(status_code=HTTP_403_FORBIDDEN, detail="Invalid API key")
get_api_key
函数进行验证:@app.get("/protected_route")
async def protected_route(api_key: str = Depends(get_api_key)):
return {"message": "Protected route accessed successfully"}
在上述代码中,我们使用APIKeyQuery
、APIKeyCookie
和APIKeyHeader
分别定义了三种不同的API密钥验证方式。通过在路由函数中使用Depends(get_api_key)
,我们实现了对API密钥的验证。
请注意,上述示例中的API密钥仅作为演示目的。在实际应用中,建议将API密钥存储在安全的地方,如环境变量或专用的密钥管理服务中。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云