適用於:
員工租戶 (瞭解更多資訊)
本文說明如何將範圍新增至受保護 Web API 的應用程式。
先決條件
- 在 Microsoft Entra 系統管理中心註冊新的應用程式, 僅針對此組織目錄中的帳戶進行設定。 如需詳細資訊 ,請參閱註冊應用程式 。 從應用程式 [概 觀 ] 頁面記錄下列值,以供稍後使用:
- 應用程式 (用戶端) 識別碼
- 目錄(租戶)識別碼
範圍和應用程式識別碼 URI
範圍通常具有表單 resourceURI/scopeName。 針對 Microsoft Graph,範圍具有捷徑。 例如,User.Read 是 https://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 存取的用戶端應用程式。
為了提升安全性,如欲將權杖發行限制為已指派應用程式角色的用戶端應用程式:
- 在 Microsoft Entra 系統管理中心中,於 Entra ID>應用程式註冊 下選擇您的應用程式。
- 在應用程式的 [概觀] 頁面的 [基本資訊] 中,找到並選擇其 [本地目錄中的受控應用程式] 連結,以瀏覽至其 [企業應用程式概觀] 頁面。
- 在 [管理] 底下,選取 [屬性]。
- 將 [需要指派?] 設定為 [是]。
- 選取 [儲存]。
現在 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 程式碼或其訊息字串的值,在程式碼中做出分支決策,會導致應用程式的功能和穩定性面臨風險。
後續步驟
本系列中的下一篇文章是應用程式程式碼設定。