Моя среда: бэкэнд Django, развернутый на Elastic Beanstalk за балансировщиком нагрузки приложения, который завершает SSL.
Поток такой: мой веб-сайт обслуживается на S3 и облачном фронте на домене: https://www.test.app.mydomain.com/. Это отправляет запрос на бэкэнд, который имеет домен: https://api.test.mydomain.com/. Запрос захватывает csrftoken в cookie-файлах браузера и включает его в заголовки.
Токены CSRF работают локально, но не работают в моей производственной среде. Самое главное, в куки-файлах браузера в рабочей среде нет csrftoken.
Вот мои настройки, которые актуальны:
MIDDLEWARE = [
# keep on top
'corsheaders.middleware.CorsMiddleware',
# rest of the middleware
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
SESSION_COOKIE_AGE = 7200 # 2 hours
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = ['http://localhost:3000', 'https://www.test.app.mydomain.com', 'https://test.app.mydomain.com']
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
USE_X_FORWARDED_HOST = True
CORS_ALLOWED_ORIGINS = ['http://localhost:3000', 'https://www.test.app.mydomain.com', 'https://test.app.mydomain.com']
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = list(default_headers) + [
'Tab-ID',
]
София
Вопрос задан13 июня 2024 г.