瞭解僅限應用程式存取

當應用程式直接存取資源,例如 Microsoft Graph 時,其存取不限於任何單一使用者可用的檔案或作業。 應用程式會直接使用自己的身分識別呼叫 API,而且具有系統管理員許可權的使用者或應用程式必須授權它存取資源。 此案例是僅限應用程式存取。

何時應該使用僅限應用程式存取?

在大部分情況下,僅限應用程式存取比 委派存取更廣泛且功能更強大,因此您應該只在需要時使用僅限應用程式存取。 如果:

  • 應用程式必須以自動化方式執行,而不需要用戶輸入。 例如,每日腳本會檢查來自特定聯繫人的電子郵件,並傳送自動化回應。
  • 應用程式必須存取屬於多個不同用戶的資源。 例如,備份或數據外洩防護應用程式可能需要從許多不同的聊天頻道擷取訊息,每個頻道都有不同的參與者。
  • 您發現自己很想在本機儲存認證,並允許應用程式以使用者或系統管理員身分登入。

相反地,您不應該使用僅限應用程式存取,使用者通常會登入以管理自己的資源。 這些類型的案例必須使用委派存取權,才能獲得最低許可權。

Diagram shows illustration of application permissions vs delegated permissions.

授權應用程式進行僅限應用程式呼叫

若要進行僅限應用程式呼叫,您必須將用戶端應用程式指派適當的應用程式角色。 應用程式角色也稱為僅限應用程式的許可權。 它們是應用程式角色,因為它們只會在定義角色的資源應用程式內容中授與存取權。

例如,若要讀取組織中建立的所有小組清單,您必須將應用程式指派給 Microsoft Graph Team.ReadBasic.All 應用程式角色。 當 Microsoft Graph 是資源應用程式時,此應用程式角色會授與讀取此資料的能力。 此指派不會將用戶端應用程式指派給可能允許它透過其他服務檢視此資料的Teams角色。

身為開發人員,您必須設定所有必要的應用程式專用許可權,也稱為應用程式註冊上的應用程式角色。 您可以透過 Azure 入口網站 或 Microsoft Graph 來設定應用程式所要求的僅限應用程式許可權。 僅限應用程式存取不支援動態同意,因此您無法在運行時間要求個別許可權或許可權集。

設定應用程式所需的所有許可權之後,它必須取得 系統管理員同意 ,才能存取資源。 例如,只有具有全域管理員角色的使用者才能為 Microsoft Graph API 授與僅限應用程式的許可權(應用程式角色)。 具有其他系統管理員角色的使用者,例如應用程式管理員和雲端應用程式管理員,能夠授與其他資源的僅限應用程式許可權。

管理員 使用者可以使用 Azure 入口網站 或透過 Microsoft Graph API 以程式設計方式建立授與,來授與僅限應用程式的許可權。 您也可以從應用程式內提示進行互動式同意,但此選項不理想,因為僅限應用程式存取不需要使用者。

具有 Microsoft 帳戶的取用者使用者,例如 Outlook.com 或 Xbox Live 帳戶,永遠無法授權僅限應用程式存取權。 請一律遵循最低許可權原則:您絕對不應該要求應用程式不需要的應用程式角色。 此原則可協助限制應用程式遭入侵的安全性風險,並讓系統管理員更容易授與應用程式存取權。 例如,如果您的應用程式只需要識別使用者而不閱讀其詳細設定檔資訊,您應該要求更有限的 Microsoft Graph User.ReadBasic.All 應用程式角色,而不是 User.Read.All

設計及發佈資源服務的應用程式角色

如果您要在 Microsoft Entra ID 上建置服務,以公開其他用戶端呼叫的 API,您可能想要支援應用程式角色的自動化存取(僅限應用程式許可權)。 您可以在 Microsoft Entra 系統管理中心應用程式註冊的 [應用程式角色] 區段中定義應用程式 的應用程式角色 。 如需如何建立應用程式角色的詳細資訊,請參閱 宣告應用程式的角色。

公開應用程式角色以供其他人使用時,請將案例的清楚描述提供給要指派這些角色的系統管理員。 應用程式角色通常應該盡可能縮小,並支援特定的功能案例,因為僅限應用程式存取不受用戶權力的限制。 避免公開單一角色,授與服務包含之所有 API 和資源的完整 read 或完整 read/write 存取權。

注意

應用程式角色(僅限應用程式許可權)也可以設定為支援指派給使用者和群組。 請確定您已針對預定的存取案例正確設定應用程式角色。 如果您想要讓 API 的應用程式角色用於僅限應用程式存取,請在建立應用程式角色時選取應用程式作為唯一允許的成員類型。

僅限應用程式存取如何運作?

記住僅限應用程式存取最重要的事項是,呼叫端應用程式會代表自己行事,並作為自己的身分識別。 沒有用戶互動。 如果應用程式已指派給資源的指定應用程式角色,則應用程式完全不受限制地存取該應用程式角色所控管的所有資源和作業。

一旦應用程式指派給一或多個應用程式角色(僅限應用程式許可權),就可以使用 用戶端認證流程或任何其他支持的驗證流程 ,向 Microsoft Entra 標識符要求僅限應用程式令牌。 指派的角色會新增至 roles 應用程式存取令牌的宣告。

在某些情況下,應用程式身分識別可能會判斷是否授與存取權,類似於委派呼叫中的用戶權力。 例如, Application.ReadWrite.OwnedBy 應用程式角色會授與應用程式本身管理服務主體的能力。

僅限應用程式存取範例 - 透過 Microsoft Graph 自動電子郵件通知

下列範例說明實際的自動化案例。

Alice 想要在 Windows 檔案共用中的部門報告資料夾每次註冊新檔時,透過電子郵件通知小組。 Alice 會建立排程工作,以執行 PowerShell 腳本來檢查資料夾並尋找新檔案。 然後,腳本會使用資源 API Microsoft Graph 保護的信箱傳送電子郵件。

腳本會在沒有任何使用者互動的情況下執行,因此授權系統只會檢查應用程式授權。 Exchange Online 會檢查進行呼叫的用戶端是否已由系統管理員授與應用程式許可權(應用程式角色 Mail.Send )。 如果未 Mail.Send 授與應用程式,Exchange Online 就會失敗要求。

POST /users/{id}/{userPrincipalName}/sendMail 用戶端應用程式已授與 Mail.Send 用戶端應用程式未授與 Mail.Send
腳本會使用 Alice 的信箱來傳送電子郵件。 200 – 授與存取權。 管理員 允許應用程式以任何使用者身分傳送郵件。 403 - 未經授權。 管理員 不允許此用戶端傳送電子郵件。
腳本會建立專用信箱來傳送電子郵件。 200 – 授與存取權。 管理員 允許應用程式以任何使用者身分傳送郵件。 403 - 未經授權。 管理員 不允許此用戶端傳送電子郵件。

提供的範例是應用程式授權的簡單圖例。 生產 Exchange Online 服務支援許多其他存取案例,例如限制特定 Exchange Online 信箱的應用程式許可權。

下一步