Проверка подлинности Azure Active Directory и SharePoint CSOM - PullRequest
0 голосов
/ 13 октября 2018

У меня есть веб-приложение, которое подключается к SharePoint (клиентский клиент) для создания сайтов и различных списков.

Чтобы получить доступ к среде Sharepoint клиентов, я использовал OpenIdConnectAuthenticationOptions, который запрашивает у пользователя кредитные баллы AAD, а затемразличные параметры, для которых пользователь хочет предоставить доступ (Это приложение и различные необходимые API-доступа настраиваются в AAD - при разрешении доступа к «O365 SharePoint Online»

Использование OpenIdConnectAutheticationOption, на AuthorizationCode Полученный код используетсячтобы получить «AccessToken». Использование этого «AccessToken» для получения clientContext выдает ошибку:

«401 - не авторизован»

Как получить требуемый токен, который позволяетОперация CSOM?

Код, используемый из - Active Directory Dot net Webapp Multitenant

В контроллере OnboardingController, функция Processcode, после получения AcquireTokenByAuthorizationCodeAsync используется следующий код -

        string siteUrl = "https://svtestsite.sharepoint.com/sites/powerapps";
        ClientContext ctx = new ClientContext(siteUrl);
        ctx.ExecutingWebRequest +=
                     delegate(object oSender, WebRequestEventArgs webRequestEventArgs)
                     {
webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
                                           "Bearer " + result.AccessToken; // accessToken;
               };
    ctx.Load(ctx.Web, p => p.Title);
    ctx.ExecuteQuery();
    Console.WriteLine(siteUrl);
    Console.WriteLine(ctx.Web.Title);

1 Ответ

0 голосов
/ 17 октября 2018

Фрагмент кода, которым вы поделились, который устанавливает токен на предъявителя для запроса. Заголовок авторизации мне подходит.

ctx.ExecutingWebRequest += 
                         delegate(object oSender, WebRequestEventArgs webRequestEventArgs)
                         {
    webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
                                               "Bearer " + result.AccessToken; // accessToken;
                   };

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

  1. Необходимые разрешения для вашего приложения, зарегистрированного в Azure AD.Убедитесь, что у приложения есть разрешения для «Office 365 SharePoint Online».Какие именно разрешения зависят от ваших требований / вариантов использования, но как минимум 1 должен быть там.Кроме того, вы должны пройти через поток согласия либо с помощью кнопки «Предоставить разрешения», либо как часть входящего потока для арендатора.

    enter image description here

  2. Проверьте, для какого «ресурса» был получен токен.

    По крайней мере ссылка на пример кода, упомянутая в вашем вопросе ( Active Directory Dot net Webapp Multitenant ), упоминает ресурскак "https://graph.windows.net".

    Убедитесь, что вы изменили это на URL своего семейства сайтов SharePoint ... что-то вроде "https://yoursite.sharepoint.com/".

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

  3. Если указанные выше пункты не работают, было бы целесообразно проверить токен доступа, который выотправлять в SharePoint с помощью инструмента, подобного https://jwt.io или https://jwt.ms Особенно, ищите:

    претензию "aud" , которая сообщает о предполагаемой аудитории длякоторый этот токен был выпущен.Это должен быть ваш URL-адрес SharePoint.Если это не так, это может быть причиной проблемы.

    заявка "tid" , чтобы убедиться, что токен получен от правильного клиента Azure AD.Это будет GUID.

    и другие утверждения в токене, чтобы увидеть, появляется ли что-нибудь подозрительное.

  4. Очевидное, но если вы используете делегированные разрешения, тогдаубедитесь, что у пользователя есть соответствующие разрешения в семействе сайтов SharePoint.

...