Доступ к Django Rest API с помощью токена доступа Azure и токена доступа SimpleJWT

Нужна только подсказка, перепробовал все возможные способы.

Любой подход будет высоко оценен.

Постановка проблемы: доступ к jwt аутентифицированному django rest api с использованием токена доступа azure ad в postman и локальном приложении. django приложение размещено на azure app service. Задача: передать два токена с разными значениями заголовков в заголовке авторизации так, чтобы azure токен также читался с django jwt токеном.

A. Все возможные полномочия в postman.

B. Различные ключи авторизации и значения заголовков в настройках django jwt

  1. Я развернул свое приложение django на azure app service.

  2. Я использую аутентификацию JWT для всех остальных API.

  3. У меня есть azure directory и service principal, связанные с azure web app.

  4. В postman,

Я могу получить токен доступа из azure active directory (используя clientID, Secret, resource, etc) и использовать тот же токен для вызова django rest api.

  1. Я могу легко получить доступ к неаутентифицированному API, просто используя azure access, взятый в заголовке authorization bearer.

  2. Для JWT аутентифицированных API, я не могу использовать их (грубая операция), так как ни один из моих подходов не работает.

Значение заголовка маркера доступа Azure: Bearer

Значение заголовка токена JWT в Django: Bearer, Token, JWT.

Добавьте еще один пользовательский бэкенд и проверьте токен Azure по его открытому ключу:

https://docs.djangoproject.com/en/4.1/topics/auth/customizing/

И добавьте его рядом с вашим бэкендом SimpleJWT auth.


        azure_token = request.headers['AzureToken']  # you can use custom headers or just use `Authentication` with Bearer token. Django will go through every backend to verify it.
        decoded = jwt.decode(azure_token, public_key, algorithms=["RS256"])

Если вы можете расшифровать без ошибок, это означает, что ваш токен сгенерирован Azure AD.

Вы можете следовать этому вопросу, чтобы получить свой открытый ключ https://learn.microsoft.com/en-us/answers/questions/793793/azure-ad-validate-access-token

Я нашел решение, если оно неверно, пожалуйста, дайте обратную связь.

Я создал класс аутентификации, наследующий класс JWTAuthentication. И читаю пользовательские заголовки в request.headers. таким образом я могу предоставить несколько токенов в одном запросе.

На самом деле, мое приложение размещено на azure app service. Поэтому необходимо аутентифицировать отправку, также приложение имеет встроенную аутентификацию для управления доступом пользователей, таким образом, нужен токен для этого.

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