Доступ к выборке по адресу *** из источника *** был заблокирован политикой CORS: Нет 'Access-Control-Allow-Origin' - Microsoft ADFS с Django

Я пытаюсь интегрировать Auth ADFS с Django App и Angular и постоянно получаю ошибку CORS. Я перепробовал все, но, похоже, ничего не помогает.

Access to XMLHttpRequest at 'https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/authorize?client_id={your-client-id}&response_type=token&redirect_uri={your-redirect-uri}=openid' (redirected from 'http://localhost:8080/api/base/login/') from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Моя настройка.py

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    'base_app',
    'django_crontab',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'customer_account',
    'upload_data',
    'project',
    'django_auth_adfs',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsPostCsrfMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django_auth_adfs.middleware.LoginRequiredMiddleware',
]


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
         'django_auth_adfs.rest_framework.AdfsAccessTokenAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ),
    # 'DEFAULT_PERMISSION_CLASSES': (
    #     'rest_framework.permissions.IsAdminUser'
    # ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    ),

    # 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'
    'EXCEPTION_HANDLER': 'utils.exceptionhandler.custom_exception_handler'


}


CORS_ALLOW_HEADERS = default_headers + (
    'Access-Control-Allow-Origin',
)

CORS_ALLOW_METHODS = [
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS',
]
CORS_ORIGIN_ALLOW_ALL = True

......
AUTH_ADFS = {
    'AUDIENCE': CLIENT_ID,
    'CLIENT_ID': CLIENT_ID,
    'CLIENT_SECRET': CLIENT_SECRET,
    'CLAIM_MAPPING': {
                    #     'first_name': 'given_name',
                    #   'last_name': 'family_name',
                      'email': 'upn',
                      },
    'GROUPS_CLAIM': 'roles',
    'MIRROR_GROUPS': True,
    'USERNAME_CLAIM': 'upn',
    'TENANT_ID': TENANT_ID,
    'RELYING_PARTY_ID': CLIENT_ID,
}


Django API:


@api_view(['GET'])
def loginAPI(request):
    return JsonResponse({"message": "Login Page Successful"})

Ангулярная функция:

export class LoginPageComponent implements OnInit {
  private apiUrl = 'http://127.0.0.1:8000/base/loginAPI'; // Make sure this URL is correct
  data: any;

  constructor(private dataService: DataService, private http: HttpClient, @Inject(PLATFORM_ID) private platformId: Object) { }

  ngOnInit() {
    if (isPlatformBrowser(this.platformId)) {
      this.redirectToApi();
    }
  }

  redirectToApi() {
    this.http.get(this.apiUrl).subscribe(
      (response) => {
        this.data = response;
        console.log(this.data);
      },
      (error) => {
        console.error('Error fetching data:', error);
      }
    );
  }
}

Тест Почтальона:

API http://127.0.0.1:8000/base/loginAPI работает нормально при тестировании через Postman.

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

Настройте параметры CORS в файле settings.py, как показано выше. Убедились, что промежуточное ПО настроено правильно. Проверил, что API работает в Postman. Несмотря на все эти усилия, я по-прежнему сталкиваюсь с ошибкой CORS. Любая помощь в решении этой проблемы будет очень признательна!

Заранее спасибо!

Пробовали ли вы настроить CORS в ADFS?

Ссылка здесь.

Вернуться на верх