Как разрешить CORS в django только для определенного адреса?
Нашел примеры как разрешить полностью cors с помощью django-cors-headers
CORS_ORIGIN_ALLOW_ALL = True
Но я хочу разрешить полный доступ только к одному api, а в остальном к сайту запретить.
Подскажите как это сделать?
Ответы (2 шт):
Список источников, авторизованных для выполнения межсайтовых HTTP-запросов задается с помощью параметра CORS_ALLOWED_ORIGINS
CORS_ALLOWED_ORIGINS = [
"https://example.com",
"https://sub.example.com",
"http://localhost:8080",
"http://127.0.0.1:9000",
]
https://github.com/adamchainz/django-cors-headers#configuration
CORS - это инструмент ограничения доступа к ресурсам на домене. В соответствии с этим, вам следует разделить приложение на Django на n-субдоменов/-серверов. Пример:
- example.com
- api.example.com
- private.example.com
Тогда вы сможете разрешить wildcard (*) доступ для домена api.example.com и ограничить использование private.example.com любым удобным вам способом. Например, с помощью django-cors-headers (как указано в одном из ответов), с помощью wsgi-/asgi- middleware, или настроек реверс-прокси/балансировщика (пример для nginx).
Вы не сможете покрыть только часть эндпоинтов на едином домене, т.к. ограничения применимы только к домену.