了解 Microsoft Graph 權限和同意
若要開發可擷取 Microsoft 365 資料的客戶應用程式,您必須瞭解存取權限和同意如何在 Microsoft Graph 中執行。 您想要對應用程式可以及無法存取的資料做出正確選擇。 例如,如果您想要顯示已登入銷售人員的近期會議,您希望您的應用程式具有從 Microsoft 365 存取其日曆資料的權限。
應用程式要求 權限, 以透過 Microsoft Graph 存取特定的 Microsoft 365 資源。 這些要求可以是前端 (註冊應用程式時) 或動態的 (當執行應用程式時)。 當應用程式要求權限時,使用者或系統管理員必須先 同意 權限,Microsoft Graph 才能授權要求。
當您的應用程式需要與 Microsoft Graph 互動時,有三個主要概念需要瞭解:
- Microsoft Graph 權限或範圍
- 權限類型
- 存取權杖
Microsoft Graph 權限或範圍
Microsoft Graph 權限包含 範圍 控制您的應用程式對特定資源 (例如使用者、郵件和檔案) 的存取權。 範圍也會控制可以在這些資源上執行的作業。 下列範例模式定義 Microsoft Graph 對資源的作業權限:
Resource-name.operation.constraint
例如,User.Read.All 將讀取目錄中所有使用者設定檔的權限授予應用程式。 若要讀取已登入使用者的設定檔,必要的權限為 User.Read 。
權限類型
Microsoft Entra ID 中有兩種類型的許可權:
當您的應用程式代表使用者進行 Microsoft Graph 呼叫時, 會使用 委派的權限。 使用者可以同意某些權限範圍,例如 User.Read。 但某些權限範圍具有高度特殊權限,需要系統管理員同意。 具特殊授權的權限範圍的範例是 Channel.Delete.All,代表已登入的使用者刪除任何團隊中的頻道。
委派的權限範圍最簡單的範例是 User.Read,這是呼叫
/me
端點所必要的。 在 Microsoft Graph 中,所有 API 呼叫會使用目前已登入的使用者/me
內容。應用程式權限 不需要應用程式中的已登入使用者。 它通常會在使用者不在時使用,例如背景程序或提高權限。 系統管理員事先同意權限。
應用程式權限範圍的範例為 Calendars.ReadWrite,可讓應用程式在沒有登 入使用者的情況下建立、讀取、更新及刪除所有日曆的事件。 您無法使用應用程式權限範圍的
/me
API,因為沒有已登入的使用者可以提取該資訊。
存取權杖
在您的應用程式要求權限,且使用者或系統管理員同意之後,應用程式可以從適用於開發人員的 Microsoft 身分識別平台取得 存取權杖。 您可以將存取權杖想成電影票,是提供給服務員以證明您已付費觀看影片。 您的應用程式會提供存取權杖給 Microsoft Graph,以證明它有權限存取 Microsoft 365 資料。
Microsoft Graph 需要每個要求之 HTTP 標頭中有效的存取權杖。 它會傳入每個 HTTP 要求的授權標頭,並包含「持有者」字樣且之前有一個空格。 提醒您,就像電影票一樣,持有者可以使用存取權杖。 也就是說,擁有票的任何人都可以進入,不需要證明其身分識別。 基於這個原因,Microsoft Graph 規定所有要求都需要 HTTPS 加密。 就像電影票證一樣,存取權杖的有效期只有一小段時間,通常是一小時。
以下是 Microsoft Graph 要求的授權標頭外觀範例:
GET https://graph.microsoft.com/v1.0/me/ HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==