【问题标题】:CAML-query to Sharepoint REST API results in "invalid audience URI"?对 Sharepoint REST API 的 CAML 查询导致“无效的受众 URI”?
【发布时间】:2016-03-23 08:53:40
【问题描述】:

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

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

Authorization: Bearer eyJ.. REST调用的标头,在稍微修改权限后可以正常工作。该应用程序是托管在 Sharepoint 中的 Angular SPA,因此此标头不是必需的,但并不重要。

但是,我们的一些 REST 调用还要求我们查询分类,因为普通的 Sharepoint REST API 不支持,所以我们必须点击 (/_api/web/lists/GetByTitle('ListName' )/GetItems 端点),使用 CAML 查询作为请求负载,即https://mydomain.sharepoint.com/sites/dev/_api/web/lists/GetByTitle('News')/GetItems 不幸的是,这不起作用,因为 API 只是返回 Invalid audience Uri '5exx5cef-x7xx-4xxx-axxx-4xxxx2e40'. 到目前为止,我唯一的解决方案是修改实际的 Adal.JS 库以删除此特定端点的此标头。

所以,我的问题是 - 有没有人使用 Adal.JS 对 Sharepoint REST API 进行 CAML 查询,或者遇到了类似的问题并且可以提供任何见解?

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

【问题讨论】:

    标签: sharepoint office365 office365api


    【解决方案1】:

    在这种情况下,您需要强制将端点“https://mydomain.sharepoint.com”设置为空。否则,对“mydomain.sharepoint.com”的每个请求都将添加一个由 SharePoint 服务器验证的图形授权标头。由于该应用是在 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
                );
        };
    })();
    

    【讨论】:

    • 杰弗里,感谢您的回复。不幸的是,这并不能回答我的问题。查询 SP 列表和图表工作正常。问题是我无法使用 CAML 查询来访问 /GetItems 端点,这也是查询 Sharepoint 分类法所必需的(普通端点不可能)。那么,ADAL 和 CAML 查询,有什么建议吗?
    • @Jonas,在这种情况下,您需要将端点 'mydomain.sharepoint.com' 设置为 null,我已经更新了答案。
    • 更近了!这从我的其他 SP 请求中删除了 Authorization 标头(太棒了,在任何地方都找不到如何做到这一点)。仍然将它添加到 /GetItems 端点,但不知道为什么,它是一个 POST 请求?在此处手动删除 Authorization 标头有效。评论后工作示例(无授权):my-own-domain.sharepoint.com/sites/dev/_api/web/lists/… 不工作(授权标头仍然,OP 中的错误):my-own-domain.sharepoint.com/sites/dev/_api/web/lists/…
    • @Jonas,在调用'/GetItems'服务时,尝试使用“mydomain.sharepoint.com/sites/dev/api”,如果使用'/GetItems'而不使用主机名,会与config中的endpoint不匹配。跨度>
    • 太棒了,太棒了。你已经为我解决了。因为我一直在查询一个子站点(我认为这是这个词) - 我还必须添加相对 url "/sites/dev/": null 作为新端点,瞧,工作!感谢 null 部分和所有其他帮助!你让我的生活变得更好了,谢谢!标记为答案。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多