Share via


在 Microsoft Entra ID 中更新應用程式要求的許可權

使用 Microsoft Entra 識別碼設定應用程式時,開發人員可以使用許可權要求從其他應用程式和服務存取數據。 他們可以藉由將靜態許可權新增至其應用程式的指令清單,或在運行時間動態要求許可權來要求許可權。 然後,使用者或系統管理員可以選擇在同意期間授與許可權,讓應用程式存取所需的數據。

隨著應用程式功能的發展,它需要存取的資源也會變更。 這些變更可能牽涉到啟用新功能、排除不必要的存取權,或以較不具特殊許可權的許可權取代高許可權許可權。 本文說明如何使用 Microsoft Entra 系統管理中心和 Microsoft Graph API 呼叫來更新應用程式要求的許可權。

更新應用程式的許可權不僅是安全性最佳做法,也是增強應用程式用戶體驗和採用的方法。 下一節概述更新應用程式許可權的一些優點:

  • 如果您的應用程式具有新功能,您可以要求更多許可權,讓應用程式存取所需的額外資源。
  • 如果客戶只要求運作所需的最低特殊許可權,則客戶更有可能採用您的應用程式。 它顯示您的應用程式尊重客戶的隱私權和數據保護,而且不會存取比它所需的更多資源。
  • 此外,如果您的應用程式遭到入侵,如果應用程式具有較少或較不具特殊許可權的許可權,則會有較小的爆破半徑。 這表示攻擊者對客戶數據和資源的存取權較少,因而降低潛在的損害。
  • 藉由更新應用程式的許可權,您可以改善應用程式的安全性、可用性和合規性,並與客戶建立信任。

必要條件

若要更新應用程式所要求的許可權,您需要:

  • Microsoft Entra 使用者帳戶。 如果您還沒有帳戶, 請免費建立帳戶。
  • 下列其中一個角色:Application 管理員 istrator、Cloud Application 管理員 istrator。 不是系統管理員的應用程式擁有者能夠更新應用程式所要求的許可權。

更新許可權的案例

下一節列出您需要更新應用程式要求許可權的三個主要案例:

  • 將許可權新增至應用程式
  • 從應用程式移除未使用的許可權
  • 取代許可權

注意

更新應用程式所要求的許可權不會自動授與或撤銷應用程式對受保護資源的存取權。 您的客戶或貴組織中的系統管理員必須授與已新增之新許可權的同意,或手動撤銷許可權本身。

將許可權新增至應用程式

如果您的應用程式具有需要許可權的新功能,則您可以新增許可權。

最佳做法是只要求存取應用程式所需的最低許可權。 如果您需要新增許可權以支援應用程式中的新功能,請只要求該功能的最低特殊許可權。 例如,若要將電子郵件通知功能新增至您的應用程式,它必須存取使用者的電子郵件。 若要這樣做,您必須要求許可權的 Mail.ReadWrite 存取權。

靜態同意是在應用程式註冊時向用戶或系統管理員要求許可權的方式,而不是在運行時間要求許可權。 靜態同意要求應用程式在 Microsoft Entra 系統管理中心的 [應用程式註冊] 窗格中宣告它所需的所有許可權。 使用 Microsoft Entra 系統管理中心,您只能更新靜態同意的許可權。 若要深入瞭解不同類型的同意,請參閱 同意類型。 若要瞭解如何更新動態同意的許可權,請參閱本文的 Microsoft Graph 索引標籤。

在本節中,您將瞭解如何將許可權新增至靜態同意。

您可以在 Microsoft Entra 系統管理中心以兩種不同的方式將許可權新增至靜態同意:

選項 1:在 [API 許可權] 窗格中新增許可權

  1. 以至少雲端應用程式 管理員 istrator 或應用程式擁有者身分登入 Microsoft Entra 系統管理中心
  2. 流覽至 [身分>識別應用程式> 應用程式註冊> 所有應用程式]。
  3. 尋找您要新增許可權的應用程式註冊,並加以選取。 您可以透過兩種不同的方式新增權限:
  4. [API 許可權] 窗格中新增許可權
    1. 找出 [ API 許可權] 窗格,然後選取 [ 新增許可權]。

    2. 從可用選項清單中選取您想要存取的 API,以及您想要要求的許可權,然後選取 [ 新增許可權]。

      [API 許可權] 窗格的螢幕快照。

選項 2:將許可權新增至應用程式指令清單

  1. 從左側瀏覽窗格的 [管理] 功能表群組底下,選取 [指令清單]。 選取項目會開啟編輯器,讓您直接編輯應用程式註冊對象的屬性。
  2. 請仔細編輯 requiredResourceAccess 應用程式指令清單檔中的屬性。
  3. resourceAppId新增 屬性和resourceAccess屬性,並指派必要的許可權。
  4. 儲存您的變更。

若要完成新增許可權的下列步驟,您需要下列資源和許可權:

  • 在您選擇的工具中執行 HTTP 要求,例如,在您的應用程式中,透過 Graph Explorer 或 Postman。
  • 以至少具有雲端應用程式 管理員 istrator 的使用者身分執行 API,或以目標應用程式註冊的擁有者身分執行 API。
  • 用來進行這些變更的應用程式必須獲得 Application.ReadWrite.All 許可權。
  1. 識別應用程式所需的許可權、其許可權標識碼,以及它們是否為應用程式角色(應用程式許可權)或委派的許可權。 例如,如果您想要要求 Microsoft Graph 許可權,請參閱 Microsoft Graph 許可權 以取得許可權清單及其識別符。

  2. 將必要的 Microsoft Graph 許可權新增至您的應用程式。 下列範例會呼叫 Update應用程式 API,將必要的 Microsoft Graph 許可權新增至物件識別碼 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb所識別的應用程式註冊。 此範例會使用 Analytics.ReadApplication.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.ReadApplication.Read.All 委派的許可權和應用程式許可權。 將 「範圍」中的值取代為您想要為應用程式設定的任何 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:以您想要為應用程式設定的任何 Microsoft Graph 委派許可權值取代 'scopes' 中的值。

      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 系統管理中心時,代表組織中的所有使用者授與新許可權。

當新增的權限需要管理員同意時,所需的動作會根據應用程式類型而有所不同:

  • 主租使用者中的單一租使用者應用程式和多租使用者應用程式:用戶必須以全域 管理員 istrator 身分登入,並授與全租使用者的同意
  • 客戶租使用者中的多租使用者應用程式:使用者在下次登入嘗試時看到新的同意提示。 如果許可權只需要使用者同意,則使用者可以授與同意。 如果許可權需要管理員同意,用戶必須連絡其系統管理員以授與同意。

停止要求未使用的許可權

拿掉許可權可降低公開敏感資料或危害安全性的風險,並簡化使用者或系統管理員的同意程式。 如果您的應用程式不再需要許可權,您應該藉由從應用程式註冊所需的資源存取和程式代碼中移除許可權,以防止您的應用程式要求它。 例如,不再傳送電子郵件通知的應用程式可以移除 Mail.ReadWrite 許可權。

重要

從您的應用程式註冊移除許可權不會自動撤銷已授與應用程式的許可權。 您必須手動撤銷許可權。 如需詳細資訊,請參閱 本文中針對企業應用程式 移除許可權撤銷同意一節。

若要停止要求需要靜態同意的許可權,您必須從 [應用程式註冊] 窗格中移除許可權。 租使用者的系統管理員也必須撤銷 [ 企業應用程式 ] 窗格的許可權。 如需如何撤銷授與企業應用程式許可權的詳細資訊,請參閱 撤銷企業應用程式的許可權。

在本節中,您將瞭解如何停止要求靜態同意的許可權。

您可以在 Microsoft Entra 系統管理中心以兩種不同的方式移除靜態同意的許可權:

選項 1:從 [API 許可權] 窗格

  1. 以至少雲端應用程式 管理員 istrator 或應用程式擁有者身分登入 Microsoft Entra 系統管理中心
  2. 流覽至 [身分>識別應用程式> 應用程式註冊> 所有應用程式]。
  3. 尋找您要從中移除許可權的應用程式註冊,然後加以選取。
  4. [API 許可權 ] 窗格移除權限:
    1. 找出 [ API 許可權] 窗格,並尋找您想要移除的許可權。

    2. 選取您想要移除的 API,然後選取 [先撤銷管理員同意 ],然後 移除 許可權。 它可確保已授與的許可權已從您的租用戶中移除。

      顯示如何透過 [API 許可權] 窗格移除許可權的螢幕快照。

選項 2:從應用程式指令清單

  1. 從左側瀏覽窗格的 [管理] 功能表群組底下,選取 [指令清單]。 編輯器隨即開啟,可讓您直接編輯應用程式註冊對象的屬性。
  2. 請仔細編輯 requiredResourceAccess 應用程式指令清單檔中的屬性。
  3. resourceAppId 屬性和 resourceAccess 屬性中移除不需要的許可權。
  4. 儲存您的變更。

若要完成移除許可權的下列步驟,您需要下列資源和許可權:

  • 在您選擇的工具中執行 HTTP 要求,例如,在您的應用程式中,透過 Graph Explorer 或 Postman。
  • 至少將 API 呼叫為雲端應用程式 管理員 istrator,或作為目標應用程式註冊的擁有者。
  • 用來進行這些變更的應用程式必須獲得 Application.ReadWrite.All 許可權。
  1. 識別應用程式的許可權。

  2. 例如,若要停止應用程式要求 Microsoft Graph 許可權,請識別您應用程式的 Microsoft Graph 許可權、其許可權識別碼,以及他們是應用程式角色(應用程式許可權)或委派的許可權。

  3. 從您的應用程式中移除不必要的 Microsoft Graph 許可權。 下列範例會呼叫 Update應用程式 API,從範例用戶端標識碼 00001111-aaaa-2222-bbbb-3333cccc4444所識別的應用程式註冊中移除不必要的 Microsoft Graph 許可權。 在這裡範例中,應用程式具有 Analytics.ReadUser.ReadApplication.Read.All。 我們需要移除 Analytics.Read 和委派的許可權和 Application.Read.All 應用程式許可權。 Microsoft Graph 會識別為 ServicePrincipal 物件,其 00000003-0000-0000-c000-000000000000 為全域唯 AppId 一的 ,而 Microsoft Graph 則是其 DisplayNameAppDisplayName

    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。

若要停止使用動態同意要求許可權:

  • 使用 Microsoft Graph:從 'scopes' 參數中移除不必要的 Microsoft Graph 委派許可權。 在這裡範例中,您的應用程式要求三個權限 - Analytics.ReadUser.ReadApplication.Read.All。 此應用程式不再需要委派許可權 Analytics.Read 和應用程式許可權 Application.Read.All 。 它只需要 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:移除 「範圍」中不必要的 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,是否足以讓應用程式的功能。

注意

當您修改應用程式要求的許可權以取得靜態同意時,客戶必須重新整理。 重新偵測的行為會撤銷所有先前授與的許可權,並授與新許可權的同意。 當您修改應用程式要求的許可權以進行動態同意時,不會撤銷先前授與的許可權。 客戶必須手動撤銷許可權。

若要取代許可權,您必須移除不必要的許可權,並新增替代許可權。 這些步驟就像本文的停止要求未使用許可權新增許可權一節中所述的步驟一樣。