2017-02-06 80 views
1

我正試圖從外部應用程序訪問SharePoint [Online] REST API。我使用管理員帳戶在Azure中註冊了它,併爲其分配了適當的用戶委託權限(Office 365 SharePoint Online)。使用ADAL進行Azure AD OAuth身份驗證:資源ID是什麼?

我使用ADAL.js撥打acquireToken並在我的Authorization標頭中使用該標記。一個看上去有效的令牌越來越連接,但我發現下面的401錯誤的響應:

Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown

的acquireToken()方法確實需要一個resource PARAM,並從我在線閱讀,SharePoint API的此值應爲https://[tenant].sharepoint.com,但該值僅返回一個不記名不記名令牌。

我做了什麼(會觸發先前的401錯誤)是簡單地將資源設置爲在Azure中生成的應用程序ID。這最終被設置爲我的localStorage緩存中的一個令牌。所以不記名令牌確實會返回,但我得到了異常。

兩個問題:

  1. 什麼是資源字符串,什麼是正確的值就acquireToken()調用,看到我的應用ID調用它(同樣的事情,我使用的我的ADAL配置中的客戶端ID)是唯一一個成功返回承載令牌的值?是否有適用於每個Microsoft API的資源字符串列表?我一直無法找到有關此主題的文檔。

  2. Azure上的配置有問題嗎?

謝謝!

+0

你有想過嗎?我有同樣的問題。我看到一個額外的響應標題被返回(x-ms-diagnostics:3000003; reason =「無效的聽衆Uri'f8f8d2ad-7c9d-4aac-80eb-3f00a263c879'。」; category =「invalid_client」) – Russellg

回答

2

要使用SharePoint聯機REST,我們可以使用發現服務REST來查找SharePoint服務端點。您可以從serviceResourceId的響應中找到所有服務資源ID。

您也可以考慮使用Microsoft Graph,它通過單個端點公開多個來自Office 365和其他Microsoft雲服務的API。

有關發現服務REST API的更多詳細信息,可以參考here

相關問題