Доступ к списку документов Sharepoint Online через ASP.NET

#asp.net #sharepoint #office365 #sharepoint-online

#asp.net #sharepoint #office365 #sharepoint-online

Вопрос:

Я довольно долго искал по этой теме, не найдя серебряной пули. У нас есть решение для интрасети в ASP.NET где мы просто хотим показать некоторые файлы из нашего Sharepoint Online в Office 365.

При поиске в Google появляется несколько обращений, но, похоже, ничто не является «простым» способом. Я не являюсь разработчиком Sharepoint, но хорошо разбираюсь в концепциях, поскольку я управляю установками Office 365 и Sharepoint Online в нашей компании.

Я нашел текущие ответы, которые говорят мне, что службы REST — это правильный путь, но здесь мне нужен токен OATH для доступа к ним, и здесь мои знания Sharepoint ограничены. Из того, что я прочитал, токен может быть предоставлен только через установленное приложение Sharepoint, но я точно знаю, что это можно сделать и без него. Я приобрел средство синхронизации, которое синхронизирует наш общий файловый ресурс со списком документов Sharepoint, и для этого мне не нужны никакие токены, я просто ввожу свои учетные данные, и мне не нужно ничего устанавливать в Sharepoint.

Итак, что я хочу получить от этого вопроса?

  • Кто-то, кто хорошо знает Sharepoint, чтобы направить меня в правильном направлении и у кого, возможно, есть руководство и знает, что этот метод работает. Возможно, REST — это правильный путь, но просто кажется странным, что мое программное обеспечение синхронизации может сделать это без then.

  • Если мне действительно нужно установить средство предоставления токенов в Sharepoint, небольшая помощь в том, что нужно знать о безопасности и как к ней подойти наилучшим образом.

Мы высоко ценим любую помощь и заранее благодарим! 🙂

Ответ №1:

У Microsoft есть два набора API, которые могут обращаться к SharePoint Online:

  1. Клиентская объектная модель SharePoint (CSOM):

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

  2. SharePoint REST API:

    При этом вам необходимо использовать OAuth токен для проверки подлинности.

В вашем случае вам следует использовать первый.

Комментарии:

1. Спасибо за это 🙂 Извините за мой поздний ответ, меня не было несколько дней, но большое спасибо за помощь 🙂

Ответ №2:

SharePoint Online также поддерживает режим проверки подлинности на основе утверждений. Общая идея здесь заключается в получении файлов cookie аутентификации (помимо потока аутентификации OAuth, в котором выдается токен доступа) из учетных данных пользователя. После получения cookie-файла аутентификации вы можете выполнить запросы SOAP с аутентификацией (например, через CSOM API) или REST к ресурсам SharePoint Online, как показано ниже.

Поскольку вы разрабатываете ASP.NET можно использовать веб-приложение, SharePointOnlineCredentials класс из SharePoint Online Client Components SDK, который в основном реализует схему аутентификации на основе утверждений. Он может быть установлен через nuget

Пример 1. запрашивать элементы списка через CSOM API

 using (var ctx = GetContext(webUri.ToString(), userName, password))
{

     var list = ctx.Web.Lists.GetByTitle("Documents");
     var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
     ctx.Load(items);
     ctx.ExecuteQuery();

     foreach (var item in items)
     {
        Console.WriteLine(item.FieldValues["FileRef"]);
     }

}
  

где

 private static ClientContext GetContext(string url,string username, string password)
{
     var ctx = new ClientContext(url);
     var securePassword = new SecureString();
     foreach (char c in password) securePassword.AppendChar(c);
     ctx.Credentials = new SharePointOnlineCredentials(username, securePassword);
     return ctx;
 }
  

Пример 2. запрашивать элементы списка через REST API

 using (var client = new SPHttpClient(webUri, userName, password))
{
    var listTitle = "Tasks";
    var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items",webUri,listTitle);
    var data = client.ExecuteJson(endpointUrl);
    foreach (var item in data["value"])
    {
        Console.WriteLine(item["Title"]);
    }
}
  

где

SPHttpClient.cs — реализует HTTP-клиент для SharePoint Online ( SPHttpClient класс)

SPHttpClientHandler.cs — реализует HTTP-обработчик для SharePoint Online

Комментарии:

1. Огромное спасибо! Это было именно то, что я искал! 🙂