Как пройти аутентификацию с помощью ADAL JS для SharePoint Online - PullRequest
0 голосов
/ 22 мая 2019

Я следую примеру кода, расположенного по адресу https://nickvandenheuvel.eu/tag/adal-js/, но мой код завершается ошибкой при подключении SharePoint с ошибкой ADAL AADSTS500011.

Сообщение об ошибке гласит: «Участник ресурса с именем https://my.sharepoint.com/sites/mysite не найден в клиенте с именем mytenant.onmicrosoft.com. Это может произойти, если приложение не было установлено администратором клиента».или с согласия любого пользователя в клиенте. Возможно, вы отправили запрос аутентификации не тому арендатору. "

Мой код точно такой же, как в статье.Я думаю, что, возможно, что-то нужно сделать с моей регистрацией Azure для моего сайта SharePoint, или код устарел из-за того, как теперь работают Office 365 и SharePoint.

// Assign variables
var variables = {
  // Domain of Azure AD tenant
  azureAD: "tenantname.onmicrosoft.com",
  // ClientId of Azure AD application principal
  clientId: "11111111-1111-1111-1111-111111111111",
  // GUID of SharePoint list
  listId: "22222222-2222-2222-2222-222222222222",
  // Name of SharePoint tenant
  sharePointTenant: "tenantname"
}

// Create config and get AuthenticationContext
window.config = {
  tenant: variables.azureAD,
  clientId: variables.clientId,
  postLogoutRedirectUri: window.location.origin,
  endpoints: {
    graphApiUri: "https://graph.microsoft.com",
    sharePointUri: "https://" + variables.sharePointTenant + ".sharepoint.com",
  },
  cacheLocation: "localStorage"
};
var authContext = new AuthenticationContext(config);
var user = authContext.getCachedUser();
if (!user) {
  authContext.login();
}
// Get OneDrive documents of current user with AuthenticationContext of Graph API 
authContext.acquireToken(config.endpoints.graphApiUri, function (error, token) {
  if (error || !token) {
    console.log("ADAL error occurred: " + error);
    return;
  }
  else {
    var filesUri = config.endpoints.graphApiUri + "/v1.0/me/drive/root/children";

    $.ajax({
    type: "GET",
    url: filesUri,
    headers: {
      "Authorization": "Bearer " + token
    }
    }).done(function (response) {
      console.log("Successfully fetched files from OneDrive.");
      var items = response.value;
      for (var i = 0; i < items.length; i++){
        console.log(items[i].name);
        $("#OneDrive").append("<li>" + items[i].name + "</li>");
      }
    }).fail(function () {
      console.log("Fetching files from OneDrive failed.");
    });
  }
});
// Get SharePoint documents of list with AuthenticationContext of SharePoint
    authContext.acquireToken(config.endpoints.sharePointUri, function (error, token) {
      if (error || !token) {
        console.log("ADAL error occurred: " + error);
        return;
      }
      else {
        var listUri = config.endpoints.sharePointUri + "/_api/web/lists('" + variables.listId + "')/items?$select=Title";

        $.ajax({
        type: "GET",
        url: listUri,
        headers: {
          "Authorization": "Bearer " + token,
          "accept": "application/json;odata=verbose"
        }
        }).done(function (response) {
          console.log("Successfully fetched list from SharePoint.");
          var items = response.d.results;
          for (var i = 0; i < items.length; i++){
            console.log(items[i].Title);
            $("#SharePoint").append("<li>" + items[i].Title + "</li>");
          }
        }).fail(function () {
          console.log("Fetching list from SharePoint failed.");
        });
      }
    });

Я могу сказать, что код работает для остальных API и OneDrive.Он также работает для получения информации о пользователях из Azure AD.Сообщение об ошибке появляется только при попытке взаимодействия с сайтом SharePoint.Я не уверен, что код не соответствует тому, как ADAL взаимодействует с SharePoint, или что-то в Azure AD необходимо настроить.Поскольку взаимодействие с OneDrive, похоже, работает, я предполагаю, что Azure AD не является проблемой (поскольку я не могу вспомнить, что нужно было что-то настраивать в Azure AD для OneDrive).

1 Ответ

0 голосов
/ 02 июля 2019

Ошибка: AADSTS500011 означает, что имя вашего ресурса неверно. или не существует (имеется в виду, что администратор еще не дал согласия)

т.е. https://my.sharepoint.com/sites/mysite не было найдено в списке SP вашего арендатора. Обратите внимание, что именем ресурса является URI идентификатора приложения регистрации приложения или имя SP.

Убедитесь, что вы дали согласие администратора, и дважды проверьте правильность URL-адреса Sharepoint.

За первый абзац в предоставленной вами ссылке:

Перво-наперво

Убедитесь, что ваш клиент Office 365 связан с ваш клиент Azure AD. Когда ваши арендаторы связаны, вам нужно войдите на портал управления Azure и зарегистрируйте свое приложение основной в арендаторе Azure AD. Следующим шагом является включение OAuth 2 неявных гранта для вашего участника приложения. Убедитесь, что Принципал приложения имеет как минимум Чтение пользовательских файлов и Чтение элементов в все разрешения для семейств сайтов для Office 365 SharePoint Online применение.

В README приведенной ниже ссылки на Git объясняется, как правильно создать регистрацию приложения AAD (Legacy) и предоставить согласие И включить неявный поток для статьи:

https://github.com/Azure-Samples/active-directory-javascript-singlepageapp-dotnet-webapi

Эта ссылка объясняет, как сделать неявный поток с конечной точкой v2.0:

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow

Хотя для конечной точки v2.0 вам потребуется использовать MSAL.JS в качестве библиотеки аутентификации.

По сути, вам нужно создать регистрацию приложения AAD с помощью URI идентификатора приложения с URL-адресом Sharepoint, а затем дать ему разрешения в соответствии со статьей:

как минимум Чтение пользовательских файлов и Чтение элементов во всех семействах сайтов разрешения для приложения Office 365 SharePoint Online

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

Пожалуйста, обратитесь к официальной документации о том, как правильно подключиться к SharePoint для правильной реализации решения SharePoint.

https://docs.microsoft.com/en-us/sharepoint/dev/

https://docs.microsoft.com/en-us/sharepoint/dev/spfx/connect-to-sharepoint

https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-msgraph

https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/guidance/connect-to-api-secured-with-aad

https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/guidance/call-microsoft-graph-from-your-web-part

https://docs.microsoft.com/en-us/sharepoint/dev/spfx/connect-to-anonymous-apis

...