共用方式為


了解委派存取

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

為何應該使用委派存取?

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

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

該圖表顯示委派存取案例的圖例。

相比之下,對於必須在沒有登入使用者的情況下執行的案例 (例如自動化),委派存取不是個好選擇。 對於涉及存取許多使用者資源的案例 (例如,資料外洩防護或備份),可能也不是個好選擇。 請考慮針對這些類型的作業使用僅限應用程式的存取

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

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

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

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

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

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

自我令牌

在下列案例中:

  • 資源應用程式和用戶端應用程式相同。
  • 應用程式沒有已註冊的 Web 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。 如果尚未針對 Alice 為應用程式授與 Files.Read,OneDrive 也會使要求失敗。

GET /drives/{id}/files/{id} 針對 Alice 授與 Files.Read 範圍的用戶端應用程式 未針對 Alice 授與 Files.Read 範圍的用戶端應用程式
此文件位於 Alice 的 OneDrive 中。 200 - 已授與存取權。 403 - 未經授權。 Alice (或其管理員) 不允許此用戶端讀取其檔案。
此文件位於另一位使用者的 OneDrive* 中。 403 - 未經授權。 Alice 沒有讀取此檔案的權限。 即使用戶端已獲授與 Files.Read,但在代表 Alice 執行時,還是應該加以拒絕。 403 - 未經授權。 Alice 沒有讀取此檔案的權限,而且不允許用戶端讀取其有權存取的檔案。

提供的範例已經過簡化來說明委派授權。 實際執行環境的 OneDrive 服務支援許多其他存取案例,例如共用檔案。

另請參閱