"detail": "Учетные данные для аутентификации не были предоставлены". REST-фреймворк Django, использующий бэкенд аутентификации adfs

Я работаю над проектом django, который использует django_auth_adfs (Azure Active Directory) в качестве бэкенда аутентификации. Я настроил его API-сервис с помощью rest_framework. В просматриваемых представлениях rest_framework я могу авторизоваться с помощью сеансовой аутентификации, которая требует, чтобы в моем settings.py была такая возможность:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'django_auth_adfs.rest_framework.AdfsAccessTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

При этом я могу отправлять запросы на почту, которые требуют авторизации пользователя. Но как только я меняю это на (удаление аутентификации сессии):

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'django_auth_adfs.rest_framework.AdfsAccessTokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

Я получаю ошибку http 401 unauthorized, которая означает, что он не может авторизоваться с помощью токена. Это приводит к тому, что я не могу отправлять запросы с помощью postman. Кто-нибудь знает, как я могу использовать API с помощью токенов adfs?

Вот общий вид моего файла settings.py:

Вот что я получаю: enter image description here

Также это может быть связано с тем, что настройки Nginx не передают заголовок как обратный прокси?

Я ожидал, что django rest_framework сам справится с токенизацией, но, похоже, что-то не так настроено. Я попробовал отключить авторизацию на моих api-урлах и смог отправить get-запросы и получить правильный ответ. Но я не могу отправлять post-запросы, а также это не то, что я хочу. Я хочу, чтобы только люди из моего приложения azure (уже настроенного с помощью django_auth_adfs) могли отправлять запросы.

Проблема была в моей AUDIENCE в AUTH_ADFS конфигурации в settings.py.
Она должна выглядеть так:

AUTH_ADFS = {
    'AUDIENCE': f'api://{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': 'email',
    'TENANT_ID': tenant_id,
    'RELYING_PARTY_ID': client_id,
    'LOGIN_EXEMPT_URLS': [
        '^api',  # Assuming you API is available at /api
    ],
}

Имеется в виду, что я пропустил api:// перед client_id

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