Рубрики
Без рубрики

Как написать промежуточное ПО с помощью Fast API

Для одного из моих проектов мне нужно было разместить API-сервис на платформе Rapid API. Чтобы убедиться, что все запросы к приложению направляются через RapidAPI, мне нужно было проверить специальный заголовок, отправленный RapidAPI.

Автор оригинала: Mandar Vaze.

Для одного из моих проектов мне нужно было разместить API-сервис на платформе Rapid API. Чтобы убедиться, что все запросы к приложению направляются через RapidAPI, мне нужно было проверить специальный заголовок, отправленный RapidAPI.

RapidAPI пересылает каждый действительный запрос на настроенный сервер, но вводит дополнительный заголовок X-RapidAPI-Proxy-Secret . Хотя хакер может также отправить тот же заголовок, значение этого заголовка будет известно только платформе Rapid API и вашему приложению.

Я развернул сервер на heroku и определил переменную окружения PROXY_SECRET , которую я сверяю с той, что была отправлена вместе с запросом.

Иногда мне нужно проверить сервер напрямую, и в этом случае я просто не устанавливаю эту переменную (как на моей локальной машине), и эта проверка обходится.

Код

import os
from starlette.requests import Request
from starlette.responses import PlainTextResponse

app = FastAPI()

@app.middleware("http")
async def check_rapidAPI_proxy_header(request: Request, call_next):
    # Check if server knows about valid "secret"
    secret_header = os.environ.get("PROXY_SECRET", None)
    if secret_header:
        headers = request.headers
        # If the header is missing, or does not match expected value
        # Reject the request altogether
        if (
            "X-RapidAPI-Proxy-Secret" not in headers
            or headers["X-RapidAPI-Proxy-Secret"] != secret_header
        ):
            return PlainTextResponse(
                "Direct access to the API not allowed", status_code=403
            )

    response = await call_next(request)
    return response

Ресурсы

Опубликовано первоначально на мой блог