Вход в С# и загрузка в OneDrive без взаимодействия с пользователем

В настоящее время я работаю над сервисом Windows, который проверяет и обновляет файлы Excel и загружает их в выбранное облачное хранилище - SharePoint или OneDrive. Весь процесс должен быть полностью автоматическим и без какого-либо взаимодействия с пользователем. Вся необходимая информация (имя пользователя, пароль и т.д.) Является частью файла конфигурации.

Все идет хорошо, кроме части OneDrive. Я не могу найти полностью автоматическое решение для входа и загрузки в это облачное хранилище. Я знаю о Microsoft Live SDK, но его поддержка для приложений, отличных от WinPhone и -WinStore, уменьшается, и, насколько мне известно, пользователю всегда требуется ввести имя пользователя, пароль (компонент веб-браузера).

Второй вариант - это SkyDriveClientAPI (ссылка здесь), но этот API больше не работает (как упоминалось в разделе "Проблемы" ).

Есть ли способ использовать Live SDK без взаимодействия с пользователем или у вас есть другие предложения по-другому?

Ответы

Ответ 1

Это частично достижимо

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

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

единственный способ отключить приложение от подключения одного диска - это выйти из приложения (может быть достигнуто автоматически).

Это может быть достигнуто с помощью LIVE sdk (рабочий стол) и в соответствии с рекомендациями единого входа, вам, скорее всего, потребуется доступ к следующим областям:

  • wl.basic
  • wl.signin
  • wl.skydrive_update
  • wl.offline_access

проверьте один центр dev диска:

Чтобы достичь этого, я предлагаю следующие шаги:

  • Загрузите исходный код для рабочего стола
  • Исследуйте образец ApiExplorer (Код Live Desktop SDK + образец кода ApiExplorer) - это покажет вам, как войти, выйти из системы, загрузить и загрузить контент.

После использования примера для создания базового демонстрационного приложения:

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

Ответ 2

Здесь вы можете найти информацию об их API здесь. Microsoft One Drive действительно стремится быть безопасным и уважать конфиденциальность пользователей. Именно поэтому на платформе существует так много разрешений. Они действительно подчеркивают желание не иметь осиротевших файлов или приложений, злоупотребляющих автоматизированным/загрузочным процессом, без разрешения пользователя. Для уточнения непосредственно из их API, их явные рекомендации следующие:

Рекомендации для приложений, взаимодействующих с OneDrive

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

  • Приложения, отображающие кнопку "Загрузить в OneDrive" или "Share on OneDrive", которую пользователь должен щелкнуть перед каждой загрузкой фотографии, видео, документа или другого файла.

  • Приложения для редактирования документов, для которых требуется, чтобы пользователь нажал кнопку "Загрузить в OneDrive", так что приложение может сохранить этот документ позже без дополнительного взаимодействия с пользователем.

Вот несколько примеров несоответствующих приложений:

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

  • Приложения, которые автоматически создают резервные копии файлов или папок в OneDrive.

Используйте OneDrive для того, что хорошо. OneDrive включает функции как для высококачественного просмотра и редактирования документов, а также для создания и обмен прекрасными фотоальбомами. Если возможно, примите свои приложения преимущество этих особенностей. Не подрывайте доверие к OneDrive. Над годы, когда OneDrive был доступен, пользователи стали доверять Это. Сохранение этого доверия имеет решающее значение, и ваши приложения не должны подрывать это, делая вещи, которые пользователи не ожидают, особенно в отношении конфиденциальность данных.

Ниже приведены примеры совместимых приложений:

  • Приложения, которые загружают документы или фотографии в OneDrive с доступом только для пользователей по умолчанию.

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

Вот пример несоответствующего приложения:

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

Этот фрагмент выше, из здесь, который напрямую коррелирует с One Drive API.

Вы можете обойти процесс пользователя, используя общую папку "Один диск". Что будет автоматически загружать/синхронизировать данные. Однако ошибка заключается в том, что если вы используете File.Move или File.Copy, не указывая явным образом пользователю, этот файл будет сохранен в вашем общем файле, который будет загружен одним диском. Тогда вы можете нарушать условия.

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

Ответ 3

OneDrive предлагает API для загрузки файлов. Но одно из ограничений в их рекомендациях заключается в том, что все загрузки через API должны быть инициированы пользователем или использованы. Таким образом, вы не можете загружать файлы в OneDrive как полностью автоматический процесс.

Одно из решений может быть предложено в комментарии. Скопируйте файлы в локальную папку OneDrive и пусть приложение OneDrive позаботится о загрузке.

Ответ 4

Два года опоздал с ответом, но я думаю, что это будет полезно для будущего использования.

После регистрации приложения вы можете получить токен доступа без всплывающего окна, см. Этот пост Получение токена доступа для Microsoft Graph с использованием OAuth REST API. Как получить токен (пример почтальона), я написал следующий код на основе этого примера почтальона:

Пример С# для получения токена без всплывающего окна:

public async Task GetTokenAsync(string tenant, string clientId, string clientSecret, string username, string password)
{
    HttpResponseMessage resp;
    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
        var req = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{tenant}/oauth2/token/");
         req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
         {
            {"grant_type", "password"},
            {"client_id", clientId},
            {"client_secret", clientSecret},
            {"resource", "https://graph.microsoft.com"},
            {"username", username},
            {"password", password}
         });

         resp = await httpClient.SendAsync(req);
         string content = await resp.Content.ReadAsStringAsync();
         var jsonObj = new JavaScriptSerializer().Deserialize<dynamic>(content);               
         string token = jsonObj["access_token"];                
         Console.WriteLine(token);
    }
}

После того, как вы взяли токен, вам будет легко войти.