В настоящее время мы пытаемся получить доступ к папке клиента Office 365 ProPlus, используя официальный OneDrive SDK для Python (https://github.com/OneDrive/onedrive-sdk-python).). Один из наших клиентов хотел бы использовать папку OneDrive в качестве способа хранения и совместного использования программным путем сгенерированные файлы, поэтому мы хотели бы предоставить основные файловые операции.
У нас есть рабочее решение для личной учетной записи OneDrive, однако, когда мы пытаемся применить тот же подход для их OneDrive, мы сталкиваемся с проблемой в процессе аутентификации.
Мы попросили их зарегистрировать приложение в Azure AD, следуя инструкциям в официальной документации. Затем они отправили нам URI перенаправления, идентификатор клиента и секрет клиента, которые мы включили в наш скрипт. Мы пытаемся использовать следующий код:
redirect_uri = 'REDIRECT_URI'
client_secret = 'CLIENT_SECRET'
client_id='CLIENT_ID'
discovery_uri = 'https://api.office.com/discovery/'
auth_server_url='https://login.microsoftonline.com/common/oauth2/authorize'
auth_token_url='https://login.microsoftonline.com/common/oauth2/token'
http_provider = onedrivesdk.HttpProvider()
auth_provider = onedrivesdk.AuthProvider(http_provider,
client_id,
auth_server_url=auth_server_url,
auth_token_url=auth_token_url)
auth_url = auth_provider.get_auth_url(redirect_uri)
code = GetAuthCodeServer.get_auth_code(auth_url, redirect_uri)
Однако при выполнении последней строки мы получаем следующее сообщение об ошибке:
Traceback (последний вызов был последним):
Файл "onedrive-test.py", строка 25, в
code = GetAuthCodeServer.get_auth_code (auth_url, redirect_uri)
Файл "/home/username/.local/lib/python3.6/site-packages/onedrivesdk/helpers/GetAuthCodeServer.py",
строка 60, в get_auth_code
s = GetAuthCodeServer ((host_address, порт), code_acquired, GetAuthCodeRequestHandler)
Файл "/home/username/.local/lib/python3.6/site-packages/onedrivesdk/helpers/GetAuthCodeServer.py",
строка 76, в init
HTTPServer. init (self, server_address, RequestHandlerClass)
Файл "/usr/lib/python3.6/socketserver.py", строка 453, в init
self.server_bind ()
Файл "/usr/lib/python3.6/http/server.py", строка 136, в server_bind
socketserver.TCPServer.server_bind (Я)
Файл "/usr/lib/python3.6/socketserver.py", строка 467, в server_bind
self.socket.bind (self.server_address)
socket.gaierror: [Errno -2] Имя или служба не известны
Мы также попытались открыть auth_url вручную, что продвинуло нас на один шаг вперед, но все еще не удалось аутентифицировать приложение со следующей ошибкой:
AADSTS50020: учетная запись пользователя «УЧЕТНАЯ ЗАПИСЬ» от провайдера идентификации
'live.com' не существует у арендатора 'TENANT NAME' и не может получить доступ
заявление «ID клиента» в этом арендаторе. Аккаунт должен быть
Сначала добавляется в качестве внешнего пользователя в арендаторе. Выйти и войти
снова с другой учетной записью пользователя Azure Active Directory.
У нас есть два вопроса:
- Что может вызвать первую ошибку? Это комментарий (см. Ниже), который можно найти в файле readme SDK об использовании класса GetAuthCodeServer. Нам кажется, что сервер не может быть запущен. Существуют ли какие-либо явно не определенные зависимости, о которых нам следует знать, прежде чем пытаться запустить веб-сервер? (Мы запускаем скрипт на Ubuntu 18.10)
Если вы хотите удалить часть этой ручной работы, вы можете
используйте вспомогательный класс GetAuthCodeServer. Этот вспомогательный класс раскручивает
веб-сервер, поэтому этот метод нельзя использовать во всех средах.
- Что касается второй проблемы, можете ли вы порекомендовать подходящий материал для настройки OneDrive для бизнеса для нашего варианта использования? Мы просмотрели много документации, но после долгих часов исследований мы так и не смогли найти правильный способ решения этой проблемы, тем более что у нас нет прямого доступа к арендатору, и мы не можем легко экспериментировать с вещами. Нам нужно было бы дать пошаговую поваренную книгу нашему клиенту, чтобы все на его стороне.
Любая помощь будет высоко ценится! :)