瞭解委派存取

當使用者登入應用程式並使用它來存取某些其他資源,例如 Microsoft Graph 時,應用程式必須先要求代表使用者存取此資源的許可權。 此常見案例稱為委派存取。

為何應該使用委派存取?

人員 經常使用不同的應用程式從雲端服務存取其數據。 例如,有人可能想要使用慣用的 PDF 閱讀程式應用程式來檢視儲存在 OneDrive 中的檔案。 另一個範例可能是公司的企業營運應用程式,其可能會擷取其同事的共享資訊,以便輕鬆選擇要求的檢閱者。 在這種情況下,用戶端應用程式、PDF 閱讀程式或公司的要求核准工具必須獲得授權,才能代表登入應用程式的使用者存取此數據。

每當您想要讓登入的使用者使用自己的資源或他們可以存取的資源時,請使用委派的存取權。 無論是系統管理員為整個組織設定原則,還是使用者刪除收件匣中的電子郵件,所有涉及用戶動作的案例都應該使用委派的存取權。

Diagram shows illustration of delegated access scenario.

相反地,委派存取通常是在不使用登入用戶的情況下執行的案例選擇,例如自動化。 對於涉及存取許多用戶資源的案例,也可能是一個糟糕的選擇,例如數據外洩防護或備份。 請考慮針對這些類型的作業使用 僅限應用程式存取

以用戶端應用程式的形式要求範圍

您的應用程式必須要求使用者授與您想要存取之資源應用程式的特定範圍或一組範圍。 範圍也可能稱為委派許可權。 這些範圍描述您的應用程式想要代表使用者執行哪些資源和作業。 例如,如果您想要讓應用程式向用戶顯示最近收到的郵件訊息和聊天訊息清單,您可能會要求使用者同意 Microsoft Graph Mail.ReadChat.Read 範圍。

您的應用程式要求範圍之後,用戶或系統管理員必須授與要求的存取權。 具有 Microsoft 帳戶的取用者使用者,例如 Outlook.com 或 Xbox Live 帳戶,一律可以自行授與範圍。 使用 Microsoft Entra 帳戶的組織使用者可能會或無法根據組織的設定授與範圍。 如果組織使用者無法直接同意範圍,則必須要求組織的系統管理員同意他們。

一律遵循最低許可權原則:您絕對不應該要求應用程式不需要的範圍。 此原則可協助限制應用程式遭入侵的安全性風險,並讓系統管理員更容易授與應用程式存取權。 例如,如果您的 app 只需要列出使用者所屬的聊天,但不需要顯示聊天訊息本身,您應該要求更有限的 Microsoft Graph Chat.ReadBasic 範圍,而不是 Chat.Read。 如需openID範圍的詳細資訊,請參閱 OpenID範圍

設計及發佈資源服務的範圍

如果您要建置 API 並想要代表使用者允許委派存取,您必須建立其他應用程式可以要求的範圍。 這些範圍應該描述用戶端可用的動作或資源。 設計範圍時,您應該考慮開發人員案例。

委派存取如何運作?

請務必記住委派存取權,就是用戶端應用程式和已登入的使用者都必須獲得適當的授權。 授與範圍是不夠的。 如果用戶端應用程式沒有正確的範圍,或用戶沒有足夠的許可權可讀取或修改資源,則呼叫將會失敗。

  • 用戶端應用程式授權 - 用戶端應用程式是透過授與範圍來授權。 當使用者或系統管理員授與用戶端應用程式以存取某些資源的範圍時,該授與將會記錄在 Microsoft Entra ID 中。 用戶端要求存取資源的所有委派存取令牌,都會代表相關使用者存取資源,然後在宣告中包含 scp 這些範圍的宣告值。 資源應用程式會檢查此宣告,以判斷用戶端應用程式是否已獲授與呼叫的正確範圍。
  • 用戶授權 - 使用者是由您所呼叫的資源所授權。 資源應用程式可以使用一或多個系統進行用戶授權,例如 角色型訪問控制、擁有權/成員資格關聯性、訪問控制清單或其他檢查。 例如,Microsoft Entra ID 會先檢查使用者是否已指派給應用程式管理或一般系統管理員角色,再允許他們刪除組織的應用程式,但也允許所有使用者刪除他們擁有的應用程式。 同樣地,SharePoint Online 服務會在允許使用者開啟檔案之前,先檢查使用者是否有適當的擁有者或讀取者許可權。

委派存取範例 – 透過 Microsoft Graph 的 OneDrive

請考慮下列範例:

Alice 想要使用用戶端應用程式來開啟資源 API Microsoft Graph 所保護的檔案。 針對用戶授權,OneDrive 服務會檢查檔案是否儲存在 Alice 的磁碟驅動器中。 如果它儲存在其他使用者的磁碟驅動器中,則 OneDrive 會拒絕 Alice 的要求,因為 Alice 無權讀取其他使用者的磁碟驅動器。

針對用戶端應用程式授權,OneDrive 會檢查進行呼叫的用戶端是否已代表登入的使用者授 Files.Read 與範圍。 在此情況下,登入的使用者是Alice。 如果 Files.Read 尚未授與 Alice 的應用程式,則 OneDrive 也會失敗要求。

GET /drives/{id}/files/{id} 授與 Files.Read Alice 的用戶端應用程式範圍 未授與 Files.Read Alice 範圍的用戶端應用程式
文件位於 Alice 的 OneDrive 中。 200 – 授與存取權。 403 - 未經授權。 Alice(或她的系統管理員)不允許此用戶端讀取她的檔案。
文件位於其他使用者的 OneDrive*中。 403 - 未經授權。 Alice 沒有讀取此檔案的許可權。 即使客戶端已獲得 Files.Read 授與,但在代理 Alice 時,應該予以拒絕。 403 – 未經授權。 Alice 沒有讀取此檔案的許可權,而且客戶端不允許讀取她有權存取的檔案。

提供的範例已簡化,以說明委派的授權。 生產 OneDrive 服務支援許多其他存取案例,例如共用檔案。

另請參閱