2016-03-23 16 views
0

我們已經成功使用Sharepoint REST API從列表中檢索項目一段時間了,但最近決定集成ADAL.JS以便能夠訪問其他Microsoft API,例如Graph,Azure AD等。對Sharepoint REST API的CAML查詢會導致「無效的受衆URI」?

成功認證後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查詢,或遇到類似的問題,並可以提供任何見解?

我懷疑這是一個配置問題,但在某種程度上損失了什麼。

回答

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 
      ); 
    }; 
})(); 
+0

Jeffrey,謝謝你的回覆。不幸的是,這並不能回答我的問題。查詢SP列表和圖表正常工作。 問題是我不能用CAML查詢來打擊/ GetItems端點,這也是查詢Sharepoint分類法所必需的(對於正常端點不可能)。 那麼,ADAL和CAML查詢,有什麼建議? –

+0

@Jonas,在這種情況下,您需要將端點'https://mydomain.sharepoint.com'設置爲空,我已經更新了我的答案。 –

+0

更接近!這從我的其他SP請求(真棒,無法找到如何做到這一點)刪除授權頭。儘管如此,仍然將它添加到/ GetItems端點,但無法弄清楚原因,但它是一個POST請求?手動刪除授權標頭在這裏有效。 評論後工作的示例(無授權): https://my-own-domain.sharepoint.com/sites/dev/_api/web/lists/getByTitle('generalinformation')/items?$select=標題,jyfo 不工作(授權標題仍然存在,OP中出錯): https://my-own-domain.sharepoint.com/sites/dev/_api/web/lists/GetByTitle('News')/GetItems –