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

Как написать промежуточное программное обеспечение, используя fastapi

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

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

Rapidapi пересылает каждый Действительно Запрос на настроенный сервер, но вводит дополнительный заголовок X-Raphapi-прокси-секрет Отказ Хотя хакер также может отправлять тот же заголовок, значение этого заголовка будет только известно только Platform Platform и вашему приложению.

Я развернул сервер на 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

Ресурсы

Оригинал: “https://dev.to/mandarvaze/how-to-write-middleware-using-fastapi-2gl”