#python #azure #azure-active-directory #o365-flow
Вопрос:
Я пытаюсь написать сценарий на Python, чтобы получать новые электронные письма из определенной папки и сохранять вложения на общий диск для загрузки в базу данных. Power Automate будет работать, но ограничение на размер файла для сохранения вложения составляет всего 20 МБ. Я могу аутентифицировать токен, но при попытке захватить электронные письма я получаю следующую ошибку:
Неавторизованный для url. Маркер не содержит разрешений или разрешения не могут быть поняты.
Я включил код, который я использую для подключения к Microsoft Graph.
(учетные данные и идентификатор арендатора указаны в моем коде правильно, я убрал их по очевидным причинам
from O365 import Account, MSOffice365Protocol, MSGraphProtocol
credentials = ('xxxxxx', 'xxxxxx')
protocol = MSGraphProtocol(default_resource='reporting.triometric@xxxx.com')
scopes_graph = protocol.get_scopes_for('message_all_shared')
scopes = ['https://graph.microsoft.com/.default']
account = Account(credentials, auth_flow_type='credentials', tenant_id="**", scopes=scopes,)
if account.authenticate():
print('Authenticated')
mailbox = account.mailbox(resource='reporting.triometric@xxxx.com')
inbox = mailbox.inbox_folder()
for message in inbox.get_messages():
print(message)
Я уже настроил разрешения через Azure, чтобы включить все необходимые делегирования «почты».
Остальная часть моего скрипта отлично работает для загрузки файлов в базу данных. В настоящее время вложения необходимо вручную сохранять на общем диске несколько раз в день, затем запускается скрипт для загрузки. Есть ли какие-то шаги, которые я упускаю? Любые идеи будут высоко оценены!
Комментарии:
1. Можете ли вы поделиться скриншотом разрешений, которые вы добавили при регистрации приложения?
2. Я добавил разрешения, настроенные для регистрации этого приложения, спасибо, что посмотрели!
3. Привет, ты изучил мой ответ? Есть ли какие-нибудь новости?
4. Спасибо за помощь, Аллен! Моя организация не разрешает никаких разрешений в меню приложения, поэтому я изменил тип auth_flow_type на «Авторизация», чтобы маркер выдавался через Интернет, но все еще жду утверждения этих разрешений ИТ-командой.
5. Если вы используете
Authorization
это, значит, он использует поток кода аутентификации. В этом случае делегированное разрешение является правильным. Я обновлю ответ. Если это полезно, вы можете пометить его как принятое. Спасибо.
Ответ №1:
auth_flow_type='credentials'
означает, что вы используете поток учетных данных клиента.
В этом случае вам следует добавить разрешения приложения, а не делегированные разрешения.
Не забудьте нажать на кнопку «Предоставить согласие администратора для {вашего арендатора}».
Обновить:
Если вы установите auth_flow_type в значение «Авторизация», он будет использовать поток кода аутентификации, для которого требуется делегированное разрешение.