Для одного из моих проектов мне нужно было разместить 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
Ресурсы
- Uvcorn’s Proxy MiddleWare – Это связано, но не было непосредственно полезно для меня.
- Быстрая документация по промежуточному программному обеспечению API
- Быстрый апипрокси Секрет
Опубликовано первоначально на мой блог