The Goal
使用 OAuth 从基于 Apache Cordova 的移动应用程序通过 REST 请求访问本地 SharePoint 数据。
到目前为止我已经尝试过的
1. Azure 移动服务/混合连接/AAD/ADAL
与博文类似代表用户访问 SharePoint https://azure.microsoft.com/en-gb/documentation/articles/mobile-services-dotnet-backend-calling-sharepoint-on-behalf-of-user/,但使用本地服务器而不是 O365:
- 客户端登录使用适用于 Apache Cordova 的 ADAL https://github.com/AzureAD/azure-activedirectory-library-for-cordova.
- 通过混合连接连接到本地服务器的移动服务。
- 使用 ADAL.net 使用步骤 1 中获取的令牌获取 SharePoint 服务器的令牌。
除了第三步之外,此操作正常,因为本地服务器和 AAD 之间没有任何连接,因此无法获取令牌。
2. 与上面相同加上 Azure 应用程序代理
我们已经按照 Kirk Evans 在本文档中的描述设置了 Azure 应用程序代理post http://blogs.msdn.com/b/kaevans/archive/2015/04/13/azure-ad-application-proxy-and-sharepoint-2013.aspx。
移动服务的 Azure AD 应用程序被授予对应用程序代理的应用程序(在同一 Azure AD 租户中)的访问权限。
现在步骤一到三运行良好。我们已经能够使用应用程序代理 URL 作为资源来获取令牌。然后我们尝试使用令牌执行 REST 请求,如下所示:
GET https://<server>.msappproxy.net/_api/web/title
Authorization: Bearer <the token>
Accept: application/json;odata=verbose
但这会发送 302 重定向到https://login.microsoftonline.com https://login.microsoftonline.com。
我尝试通过将令牌作为“id_token=”发布到应用程序代理来模拟使用浏览器时完成的握手,但这似乎有点牵强,并且不是 Azure 应用程序代理设置的目的。
我认为缺少的部分是为本地 SharePoint 启用基于令牌的身份验证。我找不到任何关于如何做到这一点的信息。我正在考虑调查本地服务器上 SharePoint 应用程序(现在是加载项)的设置。我怀疑这能否解决问题。
我尝试使用以下方法将服务器连接到 AAD:如何:使用 Office 365 SharePoint 网站在本地 SharePoint 网站上授权提供商托管的应用程序 https://msdn.microsoft.com/en-us/library/office/dn155905(v=office.15).aspx。这又更像是一次盲目的尝试。
Question
如何获取 AAD 令牌并使用它从 Cordova 移动应用程序执行针对本地 SharePoint 的请求?