Для одного из моих проектов мне нужно было провести службу 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
Ресурсы
- ProxyMiddleware Uvcorn – Это связано, но не было непосредственно для меня.
- Fastapi Mardware Документация
- Rapidapi Proxy Secret.
Оригинал: “https://dev.to/mandarvaze/how-to-write-middleware-using-fastapi-2gl”