Рубрики
Без рубрики

Автоматизация файлов загружается в Microsoft OneDrive. Неожиданные проблемы и история успеха!

В текущей данной эпоху мы живем, огромное количество отчетов генерируется каждую минуту. Загрузить… Теги с учебником, Python, Microsoftgraph, OnedRiveapi.

В текущей данной эпоху мы живем, огромное количество отчетов генерируется каждую минуту. Загрузка и распространение этих отчетов является неудобством, чтобы сказать наименее, и угроза безопасности, если в этих отчетах входят чувствительные/конфиденциальные данные.

В настоящее время я отвечаю в размере примерно 200 отчетов аналитики, сгенерированные ежедневно, прикрепленные к электронным письмам и отправлены в аудиторию в соответствии с различными ведомствами. Хотя это трудоемкая задача, это не было проблемой безопасности только потому, что эти электронные письма и доклады были доступны на устройствах одобренных Компании в закрытой и высоко защищенной сети.

Сейчас с пандемией и пребыванием в домашних заказах. Скорее всего загрузка этих отчетов на необеспеченных машинах стало срочным вопросом.

Поэтому я решил воспользоваться преимуществами Microsoft OneDrive в качестве центрального раствора для хранения. Автоматизация загрузки этих отчетов в ведомственные папки и по электронной почте просто ссылку на местоположение файла к моей аудитории, уменьшая вероятность того, что кто-то загружал файлы на их машине, когда Microsoft OneDrive поощряет превью веб-сайтов.

Это звучит как простая задача, верно? Особенно, если вы работали с Python и API раньше. Включите библиотеку запросов, настройте свой клиентский идентификатор и секрет клиента, запросите AccessToken/Refreshtoken и начните прокат.

Ну, оказалось, что работа с Microsoft Graph не так просто, особенно если вы хотите запланировать свое приложение для запуска на фоне без помех.

Хотя Microsoft имеет хорошую документацию, она все еще была расплывчана на многих критических предметах:

  • Авторизация и какая конечная точка использовать
  • Аутентификация с использованием вашей учетной записи Microsoft
  • Бег на заднем плане (приложение демона) требует высокого привилегированного доступа администратора, который я не имеют
  • Как использовать разрешение делегирования и до сих пор запустить свое приложение на заднем плане
  • Как настроить заголовок для возобновляемых больших файлов загрузки

После выполнения того, что каждый разработчик делает от чтения документации по поиску решения или идеи на переполнении стека, я не смог найти решение, используя Python, особенно для восстановимых больших файлов загрузки файлов.

Поэтому я решил опубликовать свое решение, чтобы помочь любому другую разработчику, который в настоящее время в той же обуви, что я был в пару недель назад!

Для полного кода, пожалуйста, посетите мой Гадость

Есть две основные части к этому учебству:

  1. Создать, настроить и настроить API на Azure Portal
  2. Напишите сценарий Python

Часть 1 – Создать, настроить и настроить API на Azure Portal

Шаг 1: Зарегистрируйте свое приложение Перейти к https://portal.azure.com/#home Azure Active Directory -> Регистрация приложений -> Новая регистрация

  • Назовите свой API
  • Счета в этом организационном каталоге только (один арендатор)
  • Redirect URI не нужен в качестве нашего приложения и аутентификации на заднем плане
  • Нажмите Регистрация

Как только ваш новый API создан, нажмите на API и сохраните следующие две данные для кода позже:

  • ID приложения (клиент)
  • Каталог (арендатор) идентификатор

Затем возьмите конечную точку авторизации OAUTH 2.0 (V2)

Мы будем использовать его во время скрипта авторизации, чтобы получить ссылку URL на согласие разрешений

Шаг 2: Настройте разрешения API

API Permissions → Добавить разрешение → Microsoft API → Microsoft Graph → Делегированные разрешения → Выбор разрешений Разрешения нужны “Места. Читай пиши. Все “и” файлы. Читай пиши. Все”

Шаг 3: разоблачить API

После добавления разрешений на шаге 3 мы должны подвергать API и эти разрешения на объем.

Затем нам нужно добавить идентификатор клиента и выбрать авторизованные призывы, которые мы только что добавили.

Выдержать API → Добавить клиентское приложение → Введите идентификатор клиента → Выберите авторизованные области → Нажмите Добавить приложение

Шаг 4: Отредактируйте манифест (Очень важно разрешить неявный грант)

Это очень важный шаг в наборе API. Перейти к проявлению и установить Oauth2IDToken и implovitflow в True

Теперь, когда наш API все настроен и настроен, мы можем начать писать какой-нибудь код Python !!!

Часть 2- Напишите сценарий Python

Наш код 2 разных сценариев Python:

1- Generate RodeRiveapconsenturl-public.py.

Сценарий для генерации URL-адреса согласия. Этот сценарий в основном выполняется один раз после настройки разрешений в настройке API, чтобы дать согласие пользователя на эти разрешения. Это лучшее решение для запуска основного приложения на заднем плане без использования разрешений приложений (которая представляет высокий риск безопасности, так как он является глобальным привилегием и требует одобрения администратора) Прилипая к делегированию разрешения ограничить разрешения на текущие привилегии пользователей и практически во всех случаях, оно не требует одобрения администратора.

import requests
import json
from requests_oauthlib import OAuth2Session
from oauthlib.oauth2 import MobileApplicationClient

client_id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx"
scopes = ['Sites.ReadWrite.All','Files.ReadWrite.All']
auth_url = 'https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/v2.0/authorize'

#OAuth2Session is an extension to requests.Session
#used to create an authorization url using the requests.Session interface
#MobileApplicationClient is used to get the Implicit Grant

oauth = OAuth2Session(client=MobileApplicationClient(client_id=client_id), scope=scopes)
authorization_url, state = oauth.authorization_url(auth_url)
consent_link = oauth.get(authorization_url)
print(consent_link.url)
c:/Users/jsnmtr/Code/onedrive/generateOneDriveAPIConsentURL-public.py
https://login.microsoftonline.com/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/oauth2/v2.0/authorize?response_type=token&client_id=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx&scope=Sites.ReadWrite.All+Files.ReadWrite.All&state=xxxxxxxxxxxxxxxxxxxxxxxx

Откройте ссылку в вашем веб-браузере и нажмите, чтобы принять, чтобы принять разрешения запрашиваемый

2- AutomatedOndRiveapiuploadfiles-public.py.

Это главный скрипт, он создает приложение общественного клиента с использованием библиотеки MSAL, запросить токен от имени пользователя, получить доступ к графу Microsoft и использовать API OneDrive для загрузки файлов.

Базовый поток: – Директирующие библиотеки

import os
import requests
import json
import msal

-Номальный

CLIENT_ID = 'xxxxxxxx-xxxxxxx-xxxxxx-xxxxxxx-xxxxxxxxxx'
TENANT_ID = 'xxxxxxxx-xxxxxxx-xxxxxx-xxxxxxx-xxxxxxxxxx'
AUTHORITY_URL = 'https://login.microsoftonline.com/{}'.format(TENANT_ID)
RESOURCE_URL = 'https://graph.microsoft.com/'
API_VERSION = 'v1.0'
USERNAME = 'xxxxxxxxx@xxxxxx.xxx' #Office365 user's account username
PASSWORD = 'xxxxxxxxxxxxxxx'
SCOPES = ['Sites.ReadWrite.All','Files.ReadWrite.All'] # Add other scopes/permissions as needed.

-Креата общественного клиента приложение с использованием библиотеки аутентификации Microsoft (MSAL)

#Creating a public client app, Aquire a access token for the user and set the header for API calls
cognos_to_onedrive = msal.PublicClientApplication(CLIENT_ID, authority=AUTHORITY_URL)

-Acquire Token от конечной точки платформы Microsoft Identity для доступа к API Microsoft Graph

token = cognos_to_onedrive.acquire_token_by_username_password(USERNAME,PASSWORD,SCOPES)

– Установите заголовок запроса с токеном доступа

headers = {'Authorization': 'Bearer {}'.format(token['access_token'])}

-Пожалуйста, все файл в исходном каталоге Таким образом, мы включаем в каталог, получите путь к файлу, размер файла и прочитайте данные в файле


#Looping through the files inside the source directory
for root, dirs, files in os.walk(cognos_reports_source):
    for file_name in files:
        file_path = os.path.join(root,file_name)
        file_size = os.stat(file_path).st_size
        file_data = open(file_path, 'rb')

-Если Файл менее 4 МБ:

if file_size < 4100000:   

-выполнять Простая загрузка

#Perform simple upload to the OneDrive API
            r = requests.put(onedrive_destination+"/"+file_name+":/content", data=file_data, headers=headers)

-Если файл больше 4 МБ: создайте сеанс загрузки

upload_session = requests.post(onedrive_destination+"/"+file_name+":/createUploadSession", headers=headers).json()

-Дивировать файл в байт куски

total_file_size = os.path.getsize(file_path)
chunk_size = 327680
chunk_number = total_file_size//chunk_size
chunk_leftover = total_file_size - chunk_size * chunk_number
chunk_data = f.read(chunk_size)
start_index = i*chunk_size
end_index = start_index + chunk_size

-Задавать Заголовок для сопоставления стартового индекса и конечного индекса байтового куска

headers = {'Content-Length':'{}'.format(chunk_size),'Content-Range':'bytes {}-{}/{}'.format(start_index, end_index-1, total_file_size)}

-Загрузить куски

chunk_data_upload = requests.put(upload_session['uploadUrl'], data=chunk_data, headers=headers)

Для полного кода, пожалуйста, посетите мой Гадость

Для меня, в любое время, когда вы достигаете цели, это история успеха, а также написав этот код, я достиг своей цели автоматизировать свой процесс загрузки отчетов в OneDrive! УСПЕХ!

Позвольте мне знать ваши мысли!

Найди меня на LinkedIn | Твиттер |. Dev.to |. Переполнение стека

Оригинал: “https://dev.to/jsnmtr/automating-files-upload-to-microsoft-onedrive-unexpected-challenges-and-a-success-story-2ini”