共用方式為


教學課程:使用函式和 Microsoft Graph 指派自定義角色

本文示範如何使用函式來查詢 Microsoft Graph ,並根據使用者的 Active Directory 群組成員資格,將自定義角色指派給使用者。

在本教學課程中,您將了解:

  • 部署靜態 Web 應用程式。
  • 建立 Microsoft Entra 應用程式註冊。
  • 使用 Microsoft Entra ID 設定自訂驗證。
  • 設定無伺服器函式,以查詢使用者的 Active Directory 群組成員資格,並傳回自定義角色的清單。

注意

本教學課程 會要求您使用函式來指派角色。 函式角色管理目前為預覽狀態。 完成本教學課程所需的許可權等級為 “User.Read.All”。

應用程式 API 中有一 個名為 GetRoles 的函式。 此函式會使用使用者的存取令牌,從 Microsoft Graph 查詢 Active Directory。 如果使用者是應用程式中定義之任何群組的成員,則對應的自定義角色會對應至使用者。

必要條件

需求 註解
有效的 Azure 帳戶 如果您沒有帳戶,您可以 免費建立帳戶。
Microsoft Entra 權限 您必須有足夠的許可權才能建立 Microsoft Entra 應用程式。

建立 GitHub 存放庫

  1. 根據角色函式範本產生存放庫。 移至下列位置以建立新的存放庫。

    https://github.com/staticwebdev/roles-function/generate

  2. 將您的存放庫 命名為 my-custom-roles-app

  3. 選取 [從範本建立存放庫]

將靜態 Web 應用程式部署至 Azure

  1. 在新瀏覽器視窗中,開啟 Azure 入口網站

  2. 從左上角選取 [建立資源]。

  3. 在搜尋方塊中,輸入 靜態 Web 應用程式

  4. 選取 [Static Web Apps]

  5. 選取 建立

  6. 使用下列資訊設定靜態 Web 應用程式:

    設定 備註
    訂用帳戶 選取 Azure 訂閱。
    資源群組 建立名為 my-custom-roles-app-group 的新群組。
    名稱 my-custom-roles-app
    方案類型 標準 使用函式自定義驗證和指派角色需要 標準 方案。
    API 的區域 選取最靠近您的區域。
  7. 在 [部署詳細資料]段中:

    設定
    來源 選取 [GitHub]。
    Organization 選取您產生存放庫的組織。
    存放庫 選取 my-custom-roles-app
    分支 選取 main
  8. 在 [ 建置詳細數據] 區段中,新增此應用程式的組態詳細數據。

    設定 備註
    建置預設 選取自訂
    應用程式位置 輸入 /frontend 此資料夾包含前端應用程式。
    API 位置 /Api 存放庫中包含 API 函式的資料夾。
    輸出位置 保留空白。 此應用程式沒有組建輸出。
  9. 選取 [檢閱 + 建立]。

  10. 選取 [ 建立 ] 起始第一個部署。

  11. 程式完成後,請選取 [移至資源 ] 以開啟新的靜態 Web 應用程式。

  12. 在 [概觀] 區段中,找出應用程式的 URL。 將此值複製到文本編輯器,以在後續步驟中用來設定 Active Directory 驗證。

建立 Microsoft Entra 應用程式

  1. 在 Azure 入口網站 中,搜尋並移至 Microsoft Entra ID

  2. 從 [管理] 功能表中,選取 [應用程式註冊]。

  3. 選取 [新增註冊 ] 以開啟 [註冊應用程式 ] 視窗。 輸入下列值:

    設定 注意
    名稱 輸入 MyStaticWebApp
    支援的帳戶類型 選取此組織目錄中的 [帳戶]。
    重新導向 URI 選取 [Web ],然後輸入靜態 Web 應用程式的 Microsoft Entra 驗證回呼 URL。 <YOUR_SITE_URL>/.auth/login/aad/callback將取代<YOUR_SITE_URL>為靜態 Web 應用程式的 URL。 此 URL 是您先前步驟中複製到文字編輯器的內容。

    Create an app registration

  4. 選取註冊

  5. 建立應用程式註冊之後,將 [基本資訊] 區段中的應用程式 (用戶端) 識別碼目錄 (租使用者) 識別碼複製到文字編輯器。

    您需要這些值,才能在靜態 Web 應用程式中設定 Active Directory 驗證。

啟用標識碼令牌

  1. 從應用程式註冊設定中,選取 [管理] 底下的 [驗證]。

  2. 在 [隱含授與和混合式流程] 區段中,選取 [識別碼權杖] \(用於隱含和混合式流程\)。

    Static Web Apps 執行時間需要此設定來驗證您的使用者。

  3. 選取 [儲存]。

建立用戶端密碼

  1. 在應用程式註冊設定中,選取 [管理] 底下的 [憑證和秘密]。

  2. 用戶端密碼區段底下,選取新增用戶端密碼

  3. 針對 [ 描述] 欄位,輸入 MyStaticWebApp

  4. 針對 [ 到期] 欄位,保留預設值 6 個月

    注意

    您必須在到期日之前輪替秘密,方法是產生新的秘密,並使用其值更新您的應用程式。

  5. 選取新增

  6. 將您建立的客戶端密碼值複製到文字編輯器。

    您需要此值,才能在靜態 Web 應用程式中設定 Active Directory 驗證。

    Create a client secret

設定 Active Directory 驗證

  1. 在瀏覽器中,開啟包含您所部署靜態 Web 應用程式的 GitHub 存放庫。

    移至前端/staticwebapp.config.json的應用程式組態檔。 此檔案包含下列區段:

    "auth": {
      "rolesSource": "/api/GetRoles",
      "identityProviders": {
        "azureActiveDirectory": {
          "userDetailsClaim": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
          "registration": {
            "openIdIssuer": "https://login.microsoftonline.com/<YOUR_AAD_TENANT_ID>",
            "clientIdSettingName": "AAD_CLIENT_ID",
            "clientSecretSettingName": "AAD_CLIENT_SECRET"
          },
          "login": {
            "loginParameters": [
              "resource=https://graph.microsoft.com"
            ]
          }
        }
      }
    },
    

    此組態是由下列設定所組成:

    屬性 描述
    rolesSource 登入程式取得可用角色清單的 URL。 針對範例應用程式,URL 為 /api/GetRoles
    userDetailsClaim 用來驗證登入要求的架構 URL。
    openIdIssuer Microsoft Entra 登入路由,附加您的租用戶標識碼。
    clientIdSettingName 您的 Microsoft Entra 用戶端識別碼。
    clientSecretSettingName 您的 Microsoft Entra 用戶端秘密值。
    loginParameters 若要取得 Microsoft Graph 的存取權杖, loginParameters 欄位必須設定為 resource=https://graph.microsoft.com
  2. 選取 [ 編輯 ] 以更新檔案。

  3. 取代<YOUR_AAD_TENANT_ID>為您 Microsoft Entra ID 的目錄(租使用者)標識碼,以更新的 openIdIssuerhttps://login.microsoftonline.com/<YOUR_AAD_TENANT_ID>

  4. 選取 [ 認可變更...]。

  5. 輸入認可訊息,然後選取 [ 認可變更]。

    認可這些變更會起始 GitHub Actions 執行以更新靜態 Web 應用程式。

  6. 移至 Azure 入口網站 中的靜態 Web 應用程式資源。

  7. 選取選單 列中的 [設定 ]。

  8. 在 [ 應用程式設定] 區段中,新增下列設定:

    名稱
    AAD_CLIENT_ID 您的 Active Directory 應用程式 (用戶端) 識別碼。
    AAD_CLIENT_SECRET 您的 Active Directory 應用程式用戶端密碼值。
  9. 選取 [儲存]。

建立角色

  1. 在 Azure 入口網站 中開啟 Active Directory 應用程式註冊。

  2. 在 [管理] 底下,選取 [應用程式角色]。

  3. 選取 [ 建立應用程式角色 ],然後輸入下列值:

    設定
    Display name 輸入 admin
    允許的成員類型 選取 [ 使用者/群組]。
    輸入 admin
    描述 輸入 管理員 istrator
  4. 核取您要啟用此應用程式角色的方塊 嗎?

  5. 選取套用

  6. 現在,針對名為 讀取者的角色重複相同的程式。

  7. 複製每個角色的識別碼值,並將其放在文本編輯器中。

確認自定義角色

範例應用程式包含 API 函式 (api/GetRoles/index.js),可查詢 Microsoft Graph 以判斷使用者是否在預先定義的群組中。

根據使用者的群組成員資格,函式會將自定義角色指派給使用者。 應用程式已設定為根據這些自定義角色來限制特定路由。

  1. 在您的 GitHub 存放庫中,移至位於 api/GetRoles/index.js的 GetRoles 函式

    在頂端附近,有一個 roleGroupMappings 物件會將自定義使用者角色對應至 Microsoft Entra 群組。

  2. 選取編輯

  3. 使用 Microsoft Entra 租使用者的群組標識碼來更新 物件。

    例如,如果您有具有標識符和 b6059db5-9cef-4b27-9434-bb793aa318056b0b2fff-53e9-4cff-914f-dd97a13bfbd6群組,您會將 物件更新為:

    const roleGroupMappings = {
      'admin': '6b0b2fff-53e9-4cff-914f-dd97a13bfbd6',
      'reader': 'b6059db5-9cef-4b27-9434-bb793aa31805'
    };
    

    每當使用者以 Microsoft Entra ID 成功驗證時,就會呼叫 GetRoles 函式。 函式會使用使用者的存取令牌,從 Microsoft Graph 查詢其 Active Directory 群組成員資格。 如果使用者是 對象中 roleGroupMappings 定義之任何群組的成員,則會傳回對應的自定義角色。

    在上述範例中,如果使用者是標識符 b6059db5-9cef-4b27-9434-bb793aa31805為 Active Directory 群組的成員,則會獲授與 reader 角色。

  4. 選取 [ 認可變更...]。

  5. 新增認可訊息,然後選取 [ 認可變更]。

    進行這些變更會起始 組建,以更新靜態 Web 應用程式。

  6. 部署完成時,您可以瀏覽至應用程式的 URL 來驗證變更。

  7. 使用 Microsoft Entra ID 登入靜態 Web 應用程式。

  8. 當您登入時,範例應用程式會顯示您根據身分識別的 Active Directory 群組成員資格指派的角色清單。

    視這些角色而定,您被允許或禁止存取應用程式中的某些路由。

注意

某些對 Microsoft Graph 的查詢會傳回多個頁面的數據。 需要多個查詢要求時,Microsoft Graph 會在響應中傳回 @odata.nextLink 屬性,其中包含結果下一頁的 URL。 如需詳細資訊,請參閱 在應用程式中分頁 Microsoft Graph 數據

清除資源

刪除資源群組來清除您部署的資源。

  1. 在 Azure 入口網站中,選取左側功能表中的 [資源群組]

  2. 在 [依名稱篩選] 欄位中輸入資源群組名稱。

  3. 選取您在本教學課程中使用的資源組名。

  4. 從頂端功能表中選取 [刪除資源群組]

下一步