2017-05-10 41 views
0

我建立一個使用微軟圖形API的內部會議室應用程序,我想用一個架構擴展擴展事件對象。微軟圖形,註冊一個架構擴展

文檔:

但是運行查詢時註冊一個新的架構擴展,我收到這個HTTP響應:

{ 
    "url": "https://graph.microsoft.com/beta/schemaExtensions", 
    "status": "403 Forbidden", 
    "headers": { 
     "request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed", 
     "client-request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed", 
     "x-ms-ags-diagnostic": "{\"ServerInfo\":{\"DataCenter\":\"North Europe\",\"Slice\":\"SliceA\",\"ScaleUnit\":\"001\",\"Host\":\"AGSFE_IN_2\",\"ADSiteName\":\"DUB\"}}", 
     "duration": "742.4624" 
    }, 
    "body": { 
     "error": { 
      "code": "Authorization_RequestDenied", 
      "message": "Insufficient privileges to complete the operation.", 
      "innerError": { 
       "request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed", 
       "date": "2017-05-10T10:05:37" 
      } 
     } 
    } 
} 

我可以確認我的申請有預先必要的範圍權限爲Directory.AccessAsUser.All,並且在添加此權限後也已超過16小時。我也有驗證的域,所以命名空間應該是正確的每個文檔的參考。在代碼

我的API查詢:

Outlook.test({ 
    version: 'beta', 
    resource: 'schemaExtensions', 
    method: 'POST', 
    body: { 
     id: 'thehivegroup_beethere', 
     description: 'Extension for event presence status', 
     targetTypes: [ 'Event' ], 
     properties: [ 
      { name: 'checkIn', type: 'String' }, 
      { name: 'checkOut', type: 'String' } 
     ] 
    } 
}) 
.then(result => console.log(result), err => console.error(err)) 

導致與JSON一個POST在身體和頭與授權令牌編碼到URL https://graph.microsoft.com/beta/schemaExtensions

我已經嘗試了不同的ID,如beethere,這導致命名空間錯誤,所以我知道這應該工作正常。

有沒有其他範圍的權限,我意識到我需要啓用在這裏。這個錯誤太模糊了,我不知道什麼特權在這裏是不夠的。


編輯:有手動運行在Graph Explorer查詢作爲承租人的管理,增加了對API所需的範圍權限,並在情況下,一些額外的,但對於架構擴展的註冊查詢仍不起作用,與應用程序收到相同的錯誤信息。所以這絕對不是我的代碼中的問題,而是Microsoft Graph API。有沒有聯繫方式或方法要求微軟研究這個問題?

回答

1

Directory.AccessAsUser.All是委託權限只能(必須委派,因爲它允許訪問基於目錄的API作爲登錄用戶的訪問權限)。它不會在角色聲明中顯示,因爲它不是應用程序權限。

據我所知,知道對不對,你不能使用應用程序流(客戶端證書)來創建一個架構擴展,你需要使用「代碼授權」的流動。請讓我們知道這是否是一項要求。此外,我們很想知道,如果你想看到的架構定義註冊的經驗,申請註冊的一部分...

而且你目前無法通過圖形瀏覽器創建一個模式擴展定義(或管理的話)。爲了創建定義,您必須是管理員或創建擴展定義的應用程序的所有者,並且創建請求也必須來自該應用程序(不能是圖形瀏覽器)。我們可能會放鬆這個最後的約束。

如果你想看到它的代碼片段它可以在這裏(雖然它是一個UWP C#應用程序,而不是JS):https://github.com/microsoftgraph/uwp-csharp-snippets-rest-sample

此外,架構擴展現在是GA,並可在v1.0端點中使用。

希望這有助於

+0

謝謝,這解釋了委派權限工作方式中的細微差別。 希望看到圖形瀏覽器能夠處理委派的權限。 或者,可以通過REST /圖形API來註冊和管理模式擴展。考慮到管理模式擴展的難度,不得不爲每個應用程序的模式擴展構建大量的代碼和邏輯以及整個管理用戶界面,這看起來非常重要。這可以以某種方式在Azure門戶中進行管理,或者有一個用於管理模式擴展的單用途應用程序?一旦架構是GA,它可以重用 –

+0

Sure Nexii。請在UserVoice中爲UI添加請求(在應用註冊或其他體驗中):https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/category/101632-microsoft-graph-o365 -rest的API。我們應該儘快修復使用Graph Explorer的能力。 –

+1

想要添加,在修復之前,您可以在Graph Explorer中創建/管理架構擴展定義,您可以使用Postman來執行這些操作(您需要使用AAD v2端點來獲取Microsoft Graph的訪問令牌) –

1

此架構擴展創建REST很適合我。請確保該令牌包含Directory.AccessAsUser.All權限。您可以解析令牌,從site中檢查scp聲明。

+0

然而,不管,完全相同的REST調用架構擴展的圖形瀏覽器,這是我們理所當然的,同意管理權限的管理員帳戶的'Directory.AccessAsUser.All'許可失敗範圍。 這是否意味着圖表探索者的標記不正確地包含範圍? 我將檢查應用程序中有關角色的訪問令牌,並查看我可以使用基於服務器的授權流程來弄清楚。 –

+0

好的,我爲應用程序使用了Client Credentials流程,並且沒有看到任何'scp',但角色數組缺少訪問令牌中的'Directory.AccessAsUser.All'權限範圍。 –

+0

我很困惑,因爲我們已經在應用程序的Azure門戶中預先配置了相同的權限範圍,但由於某種原因,我們沒有收到它用於我們的令牌。我可以嘗試轉向Azure AD v2.0,但是我們的應用程序是圍繞當前的adal-node客戶端庫構建的,我懷疑這個新版本沒有支持客戶端憑據的JS庫。 –