共用方式為


在受保護的 Web API 中公開範圍

適用於帶有白色核取記號符號的綠色圓圈,表示以下內容適用於員工租戶。 員工租戶 (瞭解更多資訊

本文說明如何將範圍新增至受保護 Web API 的應用程式。

先決條件

範圍和應用程式識別碼 URI

範圍通常具有表單 resourceURI/scopeName。 針對 Microsoft Graph,範圍具有捷徑。 例如,User.Readhttps://graph.microsoft.com/user.read 的捷徑。

在應用程式註冊期間,定義這些參數:

  • 資源 URI
  • 一或多個範圍
  • 一或多個應用程式角色

根據預設,應用程式註冊入口網站會建議您使用資源 URI api://{clientId}。 此 URI 是唯一值,但人類無法理解。 如果您變更 URI,請確定新的值是唯一值。 應用程式註冊入口網站可確保您使用 已設定的發行者網域

在用戶端應用程式中,範圍會顯示為「委派的權限」,而應用程式角色會顯示為您 Web API 的「應用程式權限」

範圍也會出現在向應用程式使用者顯示的同意視窗上。 因此,請提供描述範圍的對應字串:

  • 如使用者所見。
  • 如租用戶管理員所見,管理員可授與系統管理員同意。

使用者無法核准應用程式角色的使用,因為這些角色是由應用程式本身代表自身來呼叫 Web API 使用的。 租用戶系統管理員必須同意 Web API 的用戶端應用程式公開應用程式角色。 如需詳細資訊,請參閱系統管理員同意

公開委派權限 (範圍)

若要公開委派的權限或「範圍」,請遵循設定設定應用程式以公開 Web API 中的步驟。

如果您遵循本系列文章所述的 Web API 情節,請使用下列設定:

  • 應用程式識別碼 URI:如果出現提示,請接受建議的應用程式識別碼 URI (api://<clientId>)
  • 範圍名稱access_as_user
  • 有權同意者:管理員和使用者
  • 管理員同意顯示名稱Access TodoListService as a user
  • 管理員同意敘述Accesses the TodoListService web API as a user
  • 使用者同意顯示名稱Access TodoListService as a user
  • 使用者同意敘述Accesses the TodoListService web API as a user
  • 狀態已啟用

小提示

對於 應用程式 ID URI,您可以將它設為 API 的實體權限,例如 https://graph.microsoft.com。 如果已知需要呼叫之 API 的 URL,這非常有用。

如果您的 Web API 是由服務或精靈應用程式呼叫

如果您的 API 應該由精靈、服務或其他非互動式 (人為) 應用程式存取,請公開「應用程式權限」,而非委派權限。 因為精靈和服務類型的應用程式會自動執行,並使用自己的身分識別進行驗證,所以沒有使用者可以「委派」其權限。

公開應用程式權限 (應用程式角色)

若要公開應用程式權限,請遵循將應用程式角色新增至您的應用程式中的步驟。

在 [允許的成員類型] 底下的 [建立應用程式角色] 窗格中,選取 [應用程式]。 或者如文章中所述,使用 [應用程式資訊清單編輯器] 新增角色。

限制特定用戶端應用程式的存取權杖

應用程式角色是應用程式開發人員用來公開其應用程式權限的機制。 您的 Web API 程式碼應該在從呼叫者收到的存取權杖中,檢查是否有應用程式角色。

若要新增另一層安全性,Microsoft Entra 租用戶系統管理員可以設定其租用戶,讓 Microsoft 身分識別平台 只會 將安全性權杖發行給租用戶系統管理員已核准 API 存取的用戶端應用程式。

為了提升安全性,如欲將權杖發行限制為已指派應用程式角色的用戶端應用程式:

  1. Microsoft Entra 系統管理中心中,於 Entra ID>應用程式註冊 下選擇您的應用程式。
  2. 在應用程式的 [概觀] 頁面的 [基本資訊] 中,找到並選擇其 [本地目錄中的受控應用程式] 連結,以瀏覽至其 [企業應用程式概觀] 頁面。
  3. [管理] 底下,選取 [屬性]
  4. [需要指派?] 設定為 [是]。
  5. 選取 [儲存]。

現在 Microsoft Entra ID 會檢查用戶端應用程式的應用程式角色指派,這些用戶端應用程式會要求 Web API 的存取權杖。 如果用戶端應用程式尚未指派任何應用程式角色,Microsoft Entra ID 會將錯誤訊息傳回類似 _invalid_client: AADSTS501051: Application \<application name\> isn't assigned to a role for the \<web API\>_ 的用戶端。

警告

請勿在應用程式的程式碼中使用 AADSTS 錯誤碼或其訊息字串作為常值。 Microsoft Entra ID 傳回的「AADSTS」錯誤碼和錯誤訊息字串不是不可變的*,而且 Microsoft 可能會隨時在您不知情的情況下變更。 如果您根據 AADSTS 程式碼或其訊息字串的值,在程式碼中做出分支決策,會導致應用程式的功能和穩定性面臨風險。

後續步驟

本系列中的下一篇文章是應用程式程式碼設定