Я хотел бы реализовать базовую авторизацию на предъявителя в FastAPI, но сделать это в промежуточном программном обеспечении на основе классов. Я сделал это успешно, но я не видел, как это сделать так, чтобы OpenAPI знал об этом (т. е. в документации нет возможности установить токены аутентификации)
Код: Выделить всё
class AuthMiddleware:
def __init__(self, settings):
self.settings = settings
async def __call__(self, request: Request, call_next):
if self.is_protected_url(request.method, request.url.path):
auth = request.headers.get("Authorization")
scheme, data = (auth or " ").split(" ", 1)
if scheme != "Bearer":
return JSONResponse(None, 401, {"WWW-Authenticate": "Bearer"})
if data != self.settings.auth_token:
return JSONResponse(None, 401, {"WWW-Authenticate": "Bearer"})
return await call_next(request)
def is_protected_url(self, method, url):
""" does what it does """
Код: Выделить всё
from path.to.auth import AuthMiddleware
auth_middleware = AuthMiddleware(settings)
app.middleware("http")(auth_middleware)
См.
- https://stackoverflow.com/a/74088523
- https://stackoverflow.com/a/71107848
- https://stackoverflow.com/a/73464007
- https ://github.com/florimondmanca/awesome-asgi?tab=readme-ov-file#authentication
- https://fastapi.tiangolo.com/reference/ ... e--example
Подробнее здесь: https://stackoverflow.com/questions/792 ... in-openapi