Я пишу приложение-демон для своих клиентов (несколько арендаторов), которые используют outlook.
Я использую два разрешения приложения, для которых требуется согласие администратора - Mail.ReadBasic.All
и
User.Read.All
. Моему приложению сначала нужно прочитать все идентификаторы пользователей, а затем получить все метаданные их электронных писем.
Я создал нового арендатора для office365, чтобы проверить это, назовем его - test, и отправил пару писем между 2 пользователями. Итак, сначала я перенаправляю администратора тестовой организации на конечную точку adminconsent, где он / она предоставляет разрешения приложения моему приложению. Это URL, который я использую:
https://login.microsoftonline.com/organizations/v2.0/adminconsent?
client_id=<the app ID>
&state=<some state>
&redirect_uri=<my redirect URL as written in the app configuration>
&scope=https://graph.microsoft.com/.default
После вызова этой конечной точки я вижу свое приложение в списке в тестовой организации под приложениями Enterprise и вижу, что соответствующие разрешения были предоставлены администратором.
Поскольку я не получаю код из этого потока (необходим для потока аутентификации oAuth2), мне нужно снова попросить администратора войти в систему. Я использую этот URL для этого:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?
client_id=<same app ID>
&response_type=code
&redirect_uri=<same redirect URL>
&scope=https://graph.microsoft.com/.default+offline_access+openid+profile
&state=<some state>
После успешного входа в систему я получаю код обратно на свой URL перенаправления и после другого запроса я получаю токен доступа. Используя этот токен доступа, я пытаюсь получить доступ к любому из следующих API:
Но я получаю ErrorAccessDenied
с сообщением: Access is denied. Check credentials and try again.
Дополнительная информация: я использую python и пакет MSAL для сборки приложения (используя class - ConfidentialClientApplication
) и URL-адреса для потока аутентификации (но не для конечной точки adminconsent, поскольку я не мог выяснить, как это сделать)
Знаете, что я делаю неправильно? Я схожу с ума по этому поводу ...: (