Django auth_adfs Доступ к внешним устройствам Azure

В приложении Django я использую django_auth_adfs модуль.

В моем фронтенде я могу заставить пользователей входить в систему как внешние лица компании через аутентификацию Microsoft.

К сожалению, они получают ошибку 401 при попытке отправить запрос к моему бэкенду Django.

В Django Документация я нашел следующее

Я получаю ошибку KeyError: 'upn' при проверке подлинности в Azure AD. Azure AD.¶ При некоторых обстоятельствах Azure AD не отправляет утверждение upn используемое для определения имени пользователя. Наблюдается, что это происходит с гостевыми пользователей, источником которых в обзоре пользователей Azure AD является Microsoft Account, а не Azure Active Directory. Account вместо Azure Active Directory.

В таких случаях попробуйте установить для параметра USERNAME_CLAIM значение email вместо по умолчанию upn. Или создайте нового пользователя в каталоге Azure AD.

Если я переключу USERNAME_CLAIM с upn на email, гость сможет получать результаты HTTP, но проблема в том, что члены компании теперь не могут этого делать.

Затем я перешел к своему App Registration -> Token configuration -> Access и добавил upn в качестве необязательного маркера с опцией Externally authenticated: This option includes the guest UPN as stored in the resource tenant., установленной на yes.

Теперь гость имеет в своем токене доступа также необязательное утверждение upn. К сожалению, теперь я получаю ошибку 500: django.core.exceptions.ValidationError: {'username': ['Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters.']}

Причина в том, что внутри токена гостя значение upn содержит #EXT#. Есть идеи, как с этим справиться?

Я просто хочу, чтобы доступ к данным имели как внутренние, так и зарегистрированные внешние пользователи. Конечно, позже я буду фильтровать результаты в соответствии с некоторыми ролями.

Я нашел решение, но не знаю, является ли оно лучшим...

В конце концов, я зашел в настройки Django и настроил 'USERNAME_CLAIM': 'email'

Теперь у гостей был доступ, а у внутренних устройств - нет.

Я получал для них сообщение 401. Проанализировав сообщение об ошибке, я обнаружил, что 401 был отправлен, поскольку свойство email нигде не было найдено в токенах внутреннего интерфейса.

Мне нужно было только добавить электронную почту в качестве дополнительного требования в категории доступа.

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