Доступ к папке Office 365 ProPlus OneDrive с использованием официального пакета Python SDK - PullRequest
1 голос
/ 06 марта 2019

В настоящее время мы пытаемся получить доступ к папке клиента 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.

У нас есть два вопроса:

  1. Что может вызвать первую ошибку? Это комментарий (см. Ниже), который можно найти в файле readme SDK об использовании класса GetAuthCodeServer. Нам кажется, что сервер не может быть запущен. Существуют ли какие-либо явно не определенные зависимости, о которых нам следует знать, прежде чем пытаться запустить веб-сервер? (Мы запускаем скрипт на Ubuntu 18.10)

Если вы хотите удалить часть этой ручной работы, вы можете используйте вспомогательный класс GetAuthCodeServer. Этот вспомогательный класс раскручивает веб-сервер, поэтому этот метод нельзя использовать во всех средах.

  1. Что касается второй проблемы, можете ли вы порекомендовать подходящий материал для настройки OneDrive для бизнеса для нашего варианта использования? Мы просмотрели много документации, но после долгих часов исследований мы так и не смогли найти правильный способ решения этой проблемы, тем более что у нас нет прямого доступа к арендатору, и мы не можем легко экспериментировать с вещами. Нам нужно было бы дать пошаговую поваренную книгу нашему клиенту, чтобы все на его стороне.

Любая помощь будет высоко ценится! :)

...