在 Microsoft Entra ID 中更新應用程式要求的權限
使用 Microsoft Entra ID 設定應用程式時,開發人員可以使用權限要求從其他應用程式和服務存取資料。 他們可以藉由將靜態權限新增至其應用程式的資訊清單,或藉由在執行階段以動態方式要求權限的方式,來要求權限。 然後,使用者或系統管理員可以選擇在同意期間授與權限,讓應用程式存取所需的資料。
隨著應用程式功能的發展,其需要存取的資源也會變更。 這些變更可能牽涉到啟用新功能、排除不必要的存取權,或以較不具特殊權限的權限取代具有高度特殊權限的權限。 本文說明如何使用 Microsoft Entra 系統管理中心和 Microsoft Graph API 呼叫來更新應用程式要求的權限。
更新應用程式的權限不僅是安全性最佳做法,也是增強應用程式使用者體驗和採用的方法。 下一節概述更新應用程式權限的一些優點:
- 若應用程式有新功能,您可以要求更多權限,讓應用程式存取所需的額外資源。
- 若應用程式只要求最低特殊權限就能運作,客戶就更有可能採用您的應用程式。 這表示您的應用程式尊重客戶的隱私權和資料保護,而且不會存取超出本身需求的資源。
- 此外,若應用程式遭入侵,且其具有較少或較不具有特殊權限的權限,則影響範圍也會較小。 這表示攻擊者可以存取的客戶資料和資源較少,因而降低潛在的損害。
- 藉由更新應用程式的權限,您可以提高應用程式的安全性、可用性和合規性,並與客戶建立信任。
必要條件
若要更新應用程式所要求的權限,您需要:
- Microsoft Entra 使用者帳戶。 若尚未擁有帳戶,請建立免費帳戶。
- 下列其中一個角色:應用程式系統管理員、雲端應用程式管理員。 不是系統管理員的應用程式擁有者能夠更新應用程式所要求的權限。
更新權限的案例
下一節列出您需要更新應用程式要求權限的三個主要案例:
- 將權限新增至應用程式
- 從應用程式移除未使用的權限
- 取代權限
注意
更新應用程式所要求的權限不會自動授與或撤銷應用程式對受保護資源的存取權。 您的客戶或貴組織中的管理員必須對已新增的新權限授與同意,或手動撤銷權限本身。
將權限新增至應用程式
若應用程式有一個新功能需要以前不需要的權限,則您可以新增權限。
最佳做法是只要求存取應用程式運行所需的最低權限。 若要新增權限以支援應用程式中的新功能,請對該功能只要求最低特殊權限的權限。
例如,若要將電子郵件通知功能新增至您的應用程式,其必須存取您的使用者電子郵件。 若要這樣做,您必須要求 Mail.ReadWrite
權限的存取權。
將權限新增至靜態同意
靜態同意是在應用程式註冊時向使用者或系統管理員要求權限的方式,而不是在執行階段要求權限。 靜態同意要求應用程式在 Microsoft Entra 系統管理中心的 [應用程式註冊] 窗格中宣告其所需的所有權限。 使用 Microsoft Entra 系統管理中心,您只能更新靜態同意的權限。 若要深入了解不同類型的同意,請參閱同意類型。 若要了解如何更新動態同意的權限,請參閱本文的 [Microsoft Graph] 分頁。
在本節中,您將了解如何將權限新增至靜態同意。
在 Microsoft Entra 系統管理中心,您可以使用兩種不同的方式,將權限新增至靜態同意:
選項 1:在 [API 權限] 窗格中新增權限
- 以至少雲端應用程式管理員或應用程式擁有者的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊] > [所有應用程式]。
- 尋找您要新增權限的應用程式註冊,並加以選取。 您可以透過兩種不同的方式新增權限:
- 在 [API 權限] 窗格中新增權限。
選項 2:將權限新增至應用程式資訊清單
- 從左側瀏覽窗格的 [管理] 功能表群組底下,選取 [資訊清單]。 選取項目會開啟編輯器,讓您直接編輯應用程式註冊對象的屬性。
- 請仔細編輯應用程式資訊清單檔中的
requiredResourceAccess
屬性。 - 新增
resourceAppId
屬性和resourceAccess
屬性,並指派必要的權限。 - 儲存您的變更。
若要完成新增權限的下列步驟,您需要下列資源和權限:
- 在您選擇的工具中執行 HTTP 要求,或在您的應用程式中,透過 Graph Explorer。
- 以具有至少雲端應用程式管理員身分的使用者,或以目標應用程式註冊的擁有者身分,執行 API。
- 用來進行這些變更的應用程式必須獲得
Application.ReadWrite.All
權限。
識別應用程式所需的權限、其權限識別碼,及其為應用程式角色 (應用程式權限) 或委派權限。 例如,若您想要要求 Microsoft Graph 權限,請參閱 Microsoft Graph 權限,以取得權限及其識別碼的清單。
將必要的 Microsoft Graph 權限新增至您的應用程式。 下列範例會呼叫更新應用程式 API,將必要的Microsoft Graph 權限新增至物件識別碼
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
所識別的應用程式註冊。 此範例會使用Analytics.Read
和Application.Read.All
委派權限和應用程式權限。 Microsoft Graph 會被識別為 ServicePrincipal 物件,且00000003-0000-0000-c000-000000000000
作為其全域唯一的AppId
。PATCH https://graph.microsoft.com/v1.0/applications/aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb Content-Type: application/json { "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "e03cf23f-8056-446a-8994-7d93dfc8b50e", "type": "Scope" }, { "id": "9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30", "type": "Role" } ] } ] }
將權限新增至動態同意
動態同意是在執行階段向使用者或系統管理員要求權限的方式,而不是在 [應用程式註冊] 窗格中以靜態方式宣告這些權限。 動態同意可讓應用程式只要求特定功能所需的權限,並在需要時從使用者或系統管理員取得同意。 動態同意可與委派權限搭配使用,並可結合 /.default
範圍來要求所有權限的管理員同意。
若要將權限新增至動態同意:
使用 Microsoft Graph:將必要的 Microsoft Graph 權限新增至應用程式註冊。 此範例會使用
Analytics.Read
和Application.Read.All
委派權限和應用程式權限。 將 `scopes` 中的值取代為您想要為應用程式設定的任何 Microsoft Graph 委派權限的值。要求應該類似下列範例:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=00001111-aaaa-2222-bbbb-3333cccc4444&response_type=code&scope=Analytics.Read+Application.Read
使用 MSAL.js:將 `scopes` 中的值取代為您想要為應用程式設定的任何 Microsoft Graph 委派權限的值。
const Request = { scopes: ["openid", "profile"], loginHint: "example@domain.net" }; myMSALObj.ssoSilent(Request) .then((response) => { // your logic }).catch(error => { console.error("Silent Error: " + error); if (error instanceof msal.InteractionRequiredAuthError) { myMSALObj.loginRedirect(loginRequest); } });
授與對企業應用程式已新增權限的同意
將權限新增至您的應用程式之後,使用者或管理員必須對新權限授與同意。 非管理員使用者會在登入您的應用程式時看到同意提示。 另一方面,管理員使用者第一次登入您的應用程式或 Microsoft Entra 系統管理中心時,可以代表組織中的所有使用者對新的權限授與同意。
若新增的權限需要管理員同意,所需的動作會根據應用程式類型而有所不同:
- 主租用戶中的單一租用戶應用程式和多租用戶應用程式:使用者必須至少以特殊權限角色管理員角色登入,並授與全租用戶同意。
- 客戶租用戶中的多租用戶應用程式:使用者會在下次登入嘗試時看到新的同意提示。 如果權限只需要使用者同意,則使用者可以授與同意。 如果權限需要管理員同意,使用者必須連絡其系統管理員以授與同意。
停止要求未使用的權限
移除權限可降低公開敏感性資料或危害安全性的風險,並簡化使用者或系統管理員的同意流程。 若應用程式不再需要權限,您應該從應用程式註冊所需的資源存取和程式碼中移除權限,以防止您的應用程式要求該權限。 例如,不再傳送電子郵件通知的應用程式可以移除 Mail.ReadWrite
權限。
重要
從您的應用程式註冊移除權限不會自動撤銷已授與應用程式的權限。 您必須手動撤銷權限。 如需詳細資訊,請參閱本文的撤銷對企業應用程式已移除權限的同意一節。
停止要求靜態同意的權限
若要停止要求需要靜態同意的權限,您必須從 [應用程式註冊] 窗格移除權限。 租用戶的管理員也必須在 [企業應用程式] 窗格中撤銷權限。 如需如何撤銷已授與企業應用程式之權限的詳細資訊,請參閱撤銷企業應用程式的權限。
在本節中,您將了解如何停止要求靜態同意的權限。
您可以在 Microsoft Entra 系統管理中心以兩種不同的方式移除靜態同意的權限:
選項 1:從 [API 權限] 窗格
- 以至少雲端應用程式管理員或應用程式擁有者的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊] > [所有應用程式]。
- 尋找您要從中移除權限的應用程式註冊,然後加以選取。
- 從 [API 權限] 窗格移除權限:
選項 2:從應用程式資訊清單
- 從左側瀏覽窗格的 [管理] 功能表群組底下,選取 [資訊清單]。 隨即開啟編輯器,讓您直接編輯應用程式註冊對象的屬性。
- 請仔細編輯應用程式資訊清單檔中的
requiredResourceAccess
屬性。 - 從
resourceAppId
屬性和resourceAccess
屬性中移除不需要的權限。 - 儲存您的變更。
若要完成移除權限的下列步驟,您需要下列資源和權限:
- 在您選擇的工具中執行 HTTP 要求,或在您的應用程式中,透過 Graph Explorer。
- 以至少雲端應用程式管理員的身分,或以目標應用程式註冊的擁有者身分,呼叫 API。
- 用來進行這些變更的應用程式必須獲得
Application.ReadWrite.All
權限。
識別應用程式的權限。
例如,若要停止應用程式要求 Microsoft Graph 權限,請識別應用程式的 Microsoft Graph 權限、其權限識別碼,及其為應用程式角色 (應用程式權限) 或委派權限。
從您的應用程式中移除不必要的 Microsoft Graph 權限。 下列範例會呼叫更新應用程式 API,從用戶端識別碼樣本
00001111-aaaa-2222-bbbb-3333cccc4444
所識別的應用程式註冊,移除不必要的Microsoft Graph 權限。 在此範例中,應用程式具有Analytics.Read
、User.Read
和Application.Read.All
。 我們需要移除Analytics.Read
和Application.Read.All
委派權限和應用程式權限。 Microsoft Graph 會被識別為 ServicePrincipal 物件,00000003-0000-0000-c000-000000000000
作為其全域唯一的AppId
,而 Microsoft Graph 作為其DisplayName
和AppDisplayName
。PATCH https://graph.microsoft.com/v1.0/applications/00001111-aaaa-2222-bbbb-3333cccc4444 Content-Type: application/json { "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6 ", "type": "Scope" } ] } ] }
停止要求動態同意的權限
您需要從動態同意要求中移除委派的權限時,請指定 scope 參數,同時排除您想要移除的權限。 移除權限可確保應用程式不會呼叫對應的 API。
該方法只適用於委派權限。 應用程式權限是由系統管理員透過靜態同意要求和授與,而且不會包含在 OAuth 2.0 授權要求期間的範圍參數中。
若要停止要求動態同意的權限:
- 使用 Microsoft Graph:從 'scopes' 參數移除不必要的 Microsoft Graph 委派權限。 在此範例中,您的應用程式要求三個委派權限 -
Analytics.Read
、User.Read
和Application.Read
。 此應用程式不再需要委派權限Analytics.Read
和Application.Read
。 只需要User.Read
。
要求應該類似於下列範例:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=00001111-aaaa-2222-bbbb-3333cccc4444&response_type=code&scope=User.Read
使用 MSAL.js:移除 `scopes` 中不必要的 Microsoft Graph 委派權限。
const Request = { scopes: ["openid", "profile"], loginHint: "example@domain.net" }; myMSALObj.ssoSilent(Request) .then((response) => { // your logic }).catch(error => { console.error("Silent Error: " + error); if (error instanceof msal.InteractionRequiredAuthError) { myMSALObj.loginRedirect(loginRequest); } });
撤銷對企業應用程式已移除權限的同意
從應用程式註冊中移除權限之後,租用戶中的管理員也必須撤銷同意以保護貴組織的資料。 若移除的權限需要管理員同意,所需的動作會根據應用程式類型而有所不同:
- 主租用戶中的單一租用戶應用程式和多租用戶應用程式:若為單一租用戶應用程式,請連絡租用戶的管理員,以撤銷已授與應用程式的權限。 若為多租用戶應用程式,請連絡應用程式執行個體所在的所有租用戶的管理員,以撤銷授與企業應用程式的權限。 撤銷已移除權限的同意可確保應用程式不會透過移除的權限維護存取權。
- 客戶租用戶中的多租用戶應用程式:請確定您與客戶溝通,以公告、部落格和任何其他通訊通道來撤銷權限。
若為單一租用戶和多租用戶應用程式,在啟用使用者同意的租用戶中,非管理員使用者可以使用 MyApps 入口網站來撤銷先前授與的權限同意。 如需終端使用者如何在 MyApps 入口網站中撤銷權限的詳細資訊,請參閱撤銷終端使用者同意。
取代權限
若較不具特殊權限的權限便已足夠,應該取代具有高度特殊權限的權限。
取代權限也可以降低公開敏感性資料或危害安全性的風險,進而改善使用者體驗和信任。 若應用程式使用具有高度特殊權限的權限,例如 Directory.ReadWrite.All
,您應該考慮較不具特殊權限的權限,例如 User.ReadWrite.All
,是否足以應付應用程式的功能。
注意
您修改應用程式所要求的靜態同意權限時,客戶必須重新同意。 重新同意的行為會撤銷先前授與的所有權限,然後對新權限授與同意。 您修改應用程式所要求的動態同意權限時,不會撤銷先前授與的權限。 客戶必須手動撤銷權限。
若要取代權限,您必須移除不必要的權限,然後新增替代權限。 這些步驟類似於本文的停止要求未使用的權限和新增權限章節中所述的步驟。