Вход в С# и загрузка в 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 диска:
Чтобы достичь этого, я предлагаю следующие шаги:
После использования примера для создания базового демонстрационного приложения:
- улучшите ваше приложение, чтобы использовать возможности единого входа,
- улучшите ваше приложение, чтобы обновить его токен аутентификации (так что сеанс не будет тайм-аут и т.д.)
Ответ 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);
}
}
После того, как вы взяли токен, вам будет легко войти.