Вызовите SharePoint Online с помощью того же токена AAD - PullRequest
1 голос
/ 22 апреля 2019

У меня есть приложение для платформы ботов, которое может вызывать Graph API. Существует проверка подлинности oauth для входа моего пользователя в приложение бота. Я могу запросить Graph API, как следующие запросы:

Я хочу запросить API SharePoint Online с тем же маркером, который использовался для вызова Graph API . Я дал необходимые разрешения в приложении AAD, расположенном на портале Azure. Я написал код ниже, но я получил исключение 401 Not Authorized из SPO API. Как я могу вызвать SPO API с тем же токеном?

ClientContext context = TokenHelper.GetClientContextWithAccessToken("https://mytenant.sharepoint.com/sites/test/", _token);
SharePoint.Client.List testList = context.Web.Lists.GetByTitle("Test");
CamlQuery query = CamlQuery.CreateAllItemsQuery(100);
ListItemCollection items = testList.GetItems(query);
context.Load(items);
context.ExecuteQuery(); //Fires 401 error

1 Ответ

1 голос
/ 22 апреля 2019

Вы не можете и не должны использовать access_token с Microsoft Graph в качестве аудитории для вызова SPO API.

Почему:

В Azure AD access_token,он должен содержать претензию "aud".

  • Идентифицирует предполагаемого получателя токена.В маркерах доступа аудитория - это идентификатор приложения или идентификатор приложения ресурса, назначенный вашему приложению на портале Azure. Ресурсное приложение должно проверить это значение и отклонить токен, если значение не совпадает.

  • Таким образом, в первом access_token его аудиторией должен быть Microsoft Graph API, а не SPO API.Когда вы пытались использовать access_token для вызова Microsoft Graph API, утверждение «aud» должно быть проверено.Однако, если вы попытались использовать этот access_token для вызова SPO API, значение утверждения «aud» не будет проверено, и SPO API будет рассматривать его как недействительный acc_token и даст «401 несанкционированный» ответ.

Дополнительные сведения о access_token в Azure AD: https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#validating-tokens

Дополнительная информация:

Если вы хотите использовать SPO API, нам нужно использовать Служба обнаружения Office 365 , чтобы сначала найти правильную конечную точку API службы.Однако это больше не поддерживается Microsoft, поскольку вновь созданные приложения не имеют доступа к конечной точке обнаружения O365 из-за устаревания.

В настоящее время мы рекомендуем использовать Microsoft Graph API вместо этого.

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