CAML-query 到 Sharepoint REST API 结果 "invalid audience URI"?

CAML-query to Sharepoint REST API results in "invalid audience URI"?

我们已经成功使用 Sharepoint REST API 从列表中检索项目一段时间了,但最近才决定集成 ADAL.JS 以便能够访问其他 Microsoft API例如 Graph、Azure AD 等

认证成功后Adal.js自动添加一个

Authorization: Bearer eyJ.. header 到 REST 调用,它在稍微调整权限后工作正常。该应用程序是在 Sharepoint 中托管的 Angular SPA,因此这 header 不是必需的,但并不重要。

但是,我们的一些 REST 调用还要求我们查询分类法,并且由于正常的 Sharepoint REST API 不支持,我们必须点击 (/_api/web/lists/GetByTitle('ListName')/GetItems 端点) 以 CAML-query 作为请求负载,即 https://mydomain.sharepoint.com/sites/dev/_api/web/lists/GetByTitle('News')/GetItems 不幸的是,这并不像 API 简单地 returns Invalid audience Uri '5exx5cef-x7xx-4xxx-axxx-4xxxx2e40'. 到目前为止,我唯一的解决方案是修改实际的 Adal.JS 库以删除此特定端点的 header。

所以,我的问题是 - 是否有人使用 Adal.JS 或 运行 针对 Sharepoint REST API 对类似问题进行过 CAML-queries 并可以提供任何见解?

我怀疑这是一个配置问题,但有点不知所措。

在这种情况下,您需要强制将端点“https://mydomain.sharepoint.com”设置为空。否则,对 "mydomain.sharepoint.com" 的每个请求都将添加由 SharePoint 服务器验证的图形授权 header。由于该应用程序是在 Azure AD 而不是 SharePoint 上注册的,因此它将被视为无效受众。

这是供您参考的解决方法,请让我知道它是否适合您。

(function () {
  angular.module('app', [
    'ngRoute',
    'AdalAngular'
  ]).config(config);

  // Configure the routes.
    function config($routeProvider, $httpProvider, adalAuthenticationServiceProvider) {
        $routeProvider
            .when('/', {
                templateUrl: 'views/main.html',
                controller: 'MainController',
                controllerAs: 'main'
            })

            .otherwise({
                redirectTo: '/'
            });

        // Initialize the ADAL provider with your clientID (found in the Azure Management Portal) and the API URL (to enable CORS requests).
        adalAuthenticationServiceProvider.init(
            {
                clientId: clientId,
                // The endpoints here are resources for ADAL to get tokens for.
                endpoints: {
                    'https://graph.microsoft.com': 'https://graph.microsoft.com',
                    'https://mydomain.sharepoint.com': null
                }
            },
            $httpProvider
            );
    };
})();