Аутентификация с помощью API-ключа

Развёртывание ИИ в производственной среде с помощью FastAPI

Matt Eckerle

Software and Data Engineering Leader

Зачем защищать API?

 

 

  • Защита от несанкционированного доступа
  • Безопасность конечных точек с помощью API-ключей

Защищённое хранилище

Развёртывание ИИ в производственной среде с помощью FastAPI

Как работают API-ключи

 

  • Цифровой пароль для API
  • Передаётся в заголовках запроса
  • Проверяется перед доступом к конечным точкам

Схема работы API-ключей

Развёртывание ИИ в производственной среде с помощью FastAPI

Знакомство с APIKeyHeader

from fastapi import FastAPI
from fastapi.security import APIKeyHeader
header_scheme = APIKeyHeader(

name="X-API-Key",
auto_error=True
)
Развёртывание ИИ в производственной среде с помощью FastAPI

Аутентификация конечной точки

from fastapi.security import APIKeyHeader
from fastapi import Depends, HTTPException


header_scheme = APIKeyHeader(name="X-API-Key", auto_error=True) API_SECRET_KEY = "your-secret-key"
@app.get("/items/") def read_items( api_key: str = Depends(header_scheme) ):
if api_key != API_SECRET_KEY: raise HTTPException( status_code=403, detail="Invalid API key")
return {"api_key": api_key}
  • ApiKeyHeader
  • Depends добавляет схему заголовка
  • HTTPException для обработки исключений
  • Задаёт заголовок и секретный ключ API
  • Проверяет API-ключи с помощью test_api_key
  • Вызывает 403, если ключ не совпадает с API_SECRET_KEY
Развёртывание ИИ в производственной среде с помощью FastAPI

Аутентификация приложения

def verify_api_key(api_key: str = Depends(header_scheme)):
    if api_key != API_KEY:
        raise HTTPException(status_code=403,  detail="Invalid API key")
    return api_key

app = FastAPI( dependencies=[Depends(verify_api_key)] )
@app.post("/predict") def predict_sentiment(text: str):
return { "text": text, "sentiment": "positive", "status": "success" }
Развёртывание ИИ в производственной среде с помощью FastAPI

Тестирование конечной точки

Команда с неверным API-ключом:

curl -X POST \
  http://localhost:8000/predict \
  -H "X-API-Key: wrong-key" \
  -H "Content-Type: application/json" \
  -d '{"text": "This product is amazing!"}'

Команда с верным API-ключом:

curl -X POST \
  http://localhost:8000/predict \
  -H "X-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"text": "This product is amazing!"}'

Вывод при неверном ключе:

{"detail":"Invalid API key"}

 

 

Вывод при верном ключе:

{"text":"This product is amazing!",
 "sentiment":"positive",
 "status":"success"}
Развёртывание ИИ в производственной среде с помощью FastAPI

Давайте потренируемся!

Развёртывание ИИ в производственной среде с помощью FastAPI

Preparing Video For Download...