Еще пару дней на этом, и я, в конце концов, сам решил проблемы и узнал немного больше о том, как работает Django.
Ссылка, которую я пропустил, была о том, как / откуда возникли контекстные процессоры ( сторонние) Django модули передают свой контекст на страницу, которая в конечном итоге отображается. Я не осознавал, что переменные из пакета microsoft_auth (например, authorisation_url
, использованные в его шаблоне) были доступны для меня в любом из моих шаблонов по умолчанию. Зная это, я смог реализовать немного более простую версию того же самого процесса входа в систему на основе JS, который использует панель администратора.
Предполагая, что любой, кто читает это в будущем, проходит тот же (обучающий) процесс У меня есть (с этим пакетом, в частности), я мог бы догадаться на следующих двух вопросов, которые у вас будут ...
Первый из них был "Я успешно вошел в систему ... как я делаю что-нибудь от имени пользователя ?! " Можно было бы предположить, что вам будет выдан токен доступа пользователя для использования в будущих запросах, но на момент написания этого пакета, по-видимому, по умолчанию он не выполнялся каким-либо очевидным образом. Документы для пакета помогут вам войти в панель администратора.
(На мой взгляд, не очень очевидный ответ), вы должны установить MICROSOFT_AUTH_AUTHENTICATE_HOOK
для функции, которая может быть вызвана на успешной аутентификации. Он будет передан вошедшему в систему пользователю (модели) и его маркерному JSON объекту, который вы можете использовать при работе с sh. После некоторых размышлений я решил расширить свою модель пользователя с помощью AbstractUser
и просто сохранить маркер каждого пользователя вместе с другими данными.
models.py
class User(AbstractUser):
access_token = models.CharField(max_length=2048, blank=True, null=True)
id_token = models.CharField(max_length=2048, blank=True, null=True)
token_expires = models.DateTimeField(blank=True, null=True)
aad.py
from datetime import datetime
from django.utils.timezone import make_aware
def store_token(user, token):
user.access_token = token["access_token"]
user.id_token = token["id_token"]
user.token_expires = make_aware(datetime.fromtimestamp(token["expires_at"]))
user.save()
settings.py
MICROSOFT_AUTH_EXTRA_SCOPES = "User.Read"
MICROSOFT_AUTH_AUTHENTICATE_HOOK = "django_app.aad.store_token"
Обратите внимание на настройку MICROSOFT_AUTH_EXTRA_SCOPES
, которая может быть вашим вторым / второстепенным вопросом - Области по умолчанию, установленные в пакете как SCOPE_MICROSOFT = ["openid", "email", "profile"]
, и способы добавления больше не становится очевидным. Мне нужно было добавить User.Read
по крайней мере. Помните, что параметр ожидает строку разделенных пробелами областей, а не список.
Как только у вас есть токен доступа, вы можете отправлять запросы в Microsoft Graph API. Их Graph Explorer чрезвычайно полезен для помощи в этом.