Проблема авторизации с SharePoint ClientContext, созданным с помощью ADAL Access Token - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь автоматизировать предоставление семейства сайтов SharePoint Online. Я делаю это с SharePoint CSOM. Если я создаю объект ClientContext (Microsoft.SharePoint.Client) с SharePointOnlineCredentials все отлично работает, например, создание дочерних сайтов / списков / библиотек, загрузка пользовательских главных страниц, настройка веб-свойств и т. д. (кстати, мы используем сайт публикации)

ClientContext ctx = new ClientContext(contextWebUrl);

SecureString sec_pass = new SecureString();
Array.ForEach(contextPassword.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
ctx.Credentials = new SharePointOnlineCredentials(contextUserName, sec_pass);

return ctx;

Но у меня нет пароля пользователя в производственной среде, потому что мы должны использовать аутентификацию ADAL, и у нас есть только токен доступа . Поэтому я должен создать объект ClientContext с помощью этого токена. Как;

ClientContext ctx = new ClientContext(siteUrl);
ctx.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
      {
           e.WebRequestExecutor.WebRequest.Headers.Add("Authorization", "Bearer " + siteToken.AccessToken);

           if (digestValue != null)
            {
               e.WebRequestExecutor.WebRequest.Headers.Add("X-RequestDigest", digestValue.FormDigestValue);
               e.WebRequestExecutor.WebRequest.Accept = "application/json;odata=verbose";
            }
       };
return ctx;

таким образом получение чего-то из SharePoint работает, но если я попытаюсь _set_ что-то, например, создать дочерний сайт или развернуть главную страницу в библиотеке каталогов i Я получаю 401, как показано ниже. Доступ запрещен. У вас нет разрешения на выполнение этого действия или доступ к этому ресурсу

Я думал, что это проблема обновления, но хотя я использовал X-RequestDigest , ничего не изменилось.

Некоторые люди сталкивались с той же проблемой при загрузке документов, но все ответы касаются использования rest api напрямую, и это не может решить мою проблему.

1 Ответ

0 голосов
/ 06 марта 2019

Маркер, который используется во втором методе, относится к Идентификатор клиента приложения .

Таким образом, приложению Azure необходимо необходимое разрешение, аналогичное пользовательскому. В Azure Portal / Azure Active Directory я дал AllSites.FullControl разрешение приложению, которое я использую для входа и получения токена доступа.

Таким образом, эта проблема была решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...