Django REST + API Gateway CORS Проблема с аутентификацией Cognito

У меня проблемы с CORS, скорее всего из-за того, что Frontend (Amplify) - https, а backend (ElasticBeanstalk) - http. Безуспешно пытаюсь исправить ситуацию с помощью API Gateway.

Фронтенд: Приложение React, размещенное на AWS Amplify Бэкэнд: REST-фреймворк Django на Elastic Beanstalk Аутентификация: AWS Cognito API Gateway в качестве прокси между фронтендом и бэкендом

Проблема: Получение CORS-ошибки при попытке фронтенда получить доступ к бэкенду через API-шлюз. При отключенном CORS в Chrome запрос достигает бэкенда, но не проходит с ошибкой Django auth.

Фронтенд (React/TypeScript):

const fetchVideos = async () => {
    const session = await fetchAuthSession();
    const token = session.tokens?.idToken?.toString();
    // Token looks valid: eyJraWQiOiJxTHpReFZa...
    const fullUrl = `${BASE_URL}/api/premium-content`;
    const response = await fetch(fullUrl, {
        method: 'GET',
        credentials: 'include',
        headers: {
            'Authorization': `Bearer ${token}`,
            'Content-Type': 'application/json',
        }
    });
}

Django Settings (base.py):

CORS_ALLOWED_ORIGINS = [
    "https://my-frontend.amplifyapp.com",
    "http://localhost:5173",
    "http://localhost:3000"
]
CORS_ALLOW_CREDENTIALS = True

Конфигурация шлюза API

ANY метод: Интеграция HTTP-прокси с конечной точкой EB
Метод OPTIONS: Mock-интеграция с заголовками:

Access-Control-Allow-Origin: 'https://my-frontend.amplifyapp.com'
Access-Control-Allow-Methods: 'GET,OPTIONS'
Access-Control-Allow-Headers: 'Content-Type,Authorization'
Access-Control-Allow-Credentials: 'true'

Ответы шлюза: 4XX и 5XX включены для CORS

Видим сообщение об ошибке в журнале консоли:

Access to fetch at 'https://[api-gateway-url]/prod/api/premium-content' from origin 'https://my-frontend.amplifyapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Что я пробовал

  1. Настроили CORS в Django с помощью django-cors-headers
  2. .
  3. Настройте CORS API Gateway для ресурсов и ответов шлюза
  4. .
  5. Попробовали интеграцию Mock и HTTP Proxy для метода OPTIONS
  6. .
  7. Убедились, что токен Cognito генерируется и отправляется правильно
  8. Добавлены явные CORS-заголовки в метод диспетчеризации Django view
  9. Попытка обойти стандартную аутентификацию Django в пользу пользовательского Cognito auth
Вернуться на верх