我的目标是编写一些代码以使Office 365用户能够通过REST API访问OneDrive for Business中的文件。我在Azure AD(Web App /多租户)中注册了一个应用程序,并添加了在线访问SharePoint的权限。我想使用“委托用户身份和OAuth”方案,我的应用程序通过REST API使用用户模拟访问OneDrive for Business。
应用程序清单中的权限如下:
“oauth2Permissions”:[ { “adminConsentDescription”:“允许应用程序代表已登录用户访问AppName。”, “adminConsentDisplayName”:“AppName”, “id”:“xxx”, “isEnabled”:是的, “起源”:“申请”, “type”:“User”, “userConsentDescription”:“允许应用程序代表您访问AppName。”, “userConsentDisplayName”:“AppName”, “value”:“user_impersonation” }
应用程序请求(OneDrive For Business)用户登录Office365以获取授权代码(发送到已注册的重定向URL)并使用它来检索访问令牌(通过POST到我的应用程序的令牌端点)。返回的JWT中的“aud”字段设置为我的客户端ID。它应该像“00000003-0000-0ff1-ce00-000000000000”而不是SharePoint Online吗?
当我尝试使用访问令牌作为请求标头中的承载时,在https:// {tenant} -my.sharepoint.com/_api/v1.0/me/发出GET,我得到了一个错误401:“错误:无效客户端”,“错误:无效的受众URI:https:// {tenant} -my.sharepoint.com/”。这指向某处的配置错误,但我无法弄清楚需要改变什么。
答案 0 :(得分:3)
aud =令牌的受众。将令牌发布到客户端应用程序时,受众是客户端的client_id。您可能希望尝试使用Discovery Service API检查服务端点(https://msdn.microsoft.com/en-us/office/office365/howto/discover-service-endpoints)。错误显示受众URI无效,因此服务可能无法在您调用的URL上运行(即https:// {tenant} -my.sharepoint.com/_api/v1.0/me/ )。以上链接应该可以帮助您找出问题所在。我希望有所帮助。