我有一个能够调用Graph API的bot框架应用程序。有一个oauth身份验证流程可以将我的用户登录到bot应用程序。我可以像以下请求一样查询Graph API:
https://graph.microsoft.com/v1.0/me
https://graph.microsoft.com/v1.0/sites/xxxx.sharepoint.com:/sites/test:/lists/Test/items
我想使用与调用Graph API相同的标记来查询SharePoint Online API。我在位于Azure门户中的AAD应用程序中提供了必要的权限。我写了下面的代码,但我从SPO API获得了401 Not Authorized
异常。如何使用相同的令牌调用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
您不能也不应该将access_token与Microsoft Graph一起用作调用SPO API的受众。
为什么:
在Azure AD access_token中,它必须包含“aud”声明。
有关Azure AD中访问令牌的详细信息,请参阅:qazxsw poi
更多信息:
如果您想使用SPO API,我们需要先使用https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#validating-tokens查找正确的服务API端点。但是,Microsoft不再支持此功能,因为新创建的应用程序由于弃用而无法访问O365发现端点。
目前,我们建议您使用Microsoft Graph API。