我尝试从外部应用程序访问SharePoint [Online] REST API。我已在管理员帐户下在Azure中注册了该帐户,并为其分配了相应的用户委派权限(Office 365 SharePoint Online
)。
我使用ADAL.js来调用acquireToken
并在我的Authorization
标头中使用该标记。看起来有效的令牌已被附加,但我在响应中收到以下401错误:
Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown
acquireToken()方法确实采用resource
参数,从我在线阅读的内容来看,SharePoint API的这个值应为https://[tenant].sharepoint.com
,但只返回{{} 1}}持有人令牌。
我所做的(触发前一个401错误)只是将资源设置为Azure中生成的应用ID。最终在我的localStorage缓存中设置为令牌。所以持有者令牌确实返回,但我得到了例外。
两个问题:
什么是资源字符串,以及在acquireToken()上调用的正确值是什么,看到用我的应用ID调用它(同样我在我的ADAL配置中用作客户端ID) )是唯一成功返回承载令牌的值吗?是否有每个Microsoft API的正确资源字符串列表?我一直无法找到有关此主题的文档。
我在Azure上配置的问题是什么?
谢谢!
答案 0 :(得分:2)
要使用SharePoint联机REST,我们可以使用发现服务REST来查找SharePoint服务端点。您可以从响应的 serviceResourceId 中找到所有服务资源ID。
您还可以考虑使用Microsoft Graph通过单个端点公开Office 365和其他Microsoft云服务中的多个API。
有关发现服务REST API的更多详细信息,您可以参考here。