Azure Static Web Apps 中的自訂驗證

Azure Static Web Apps 提供 受控驗證 ,使用由 Azure 管理的提供者註冊。 若要啟用註冊的彈性,您可以使用自訂註冊覆寫預設值。

  • 自訂驗證也可讓您設定 支援 OpenID 連線 的自訂提供者 。 此設定允許註冊多個外部提供者。

  • 使用任何自訂註冊會停用所有預先設定的提供者。

注意

自訂驗證僅適用于 Azure Static Web Apps Standard 方案。

設定自訂識別提供者

自訂識別提供者是在 auth 組態檔 的 區段中設定

為了避免將秘密放在原始檔控制中,組態會查看 組態檔中相符名稱的應用程式設定 。 您也可以選擇將秘密儲存在 Azure 金鑰保存庫

若要建立註冊,請從建立下列 應用程式設定 開始:

設定名稱
AZURE_CLIENT_ID Microsoft Entra 應用程式註冊的應用程式(用戶端)識別碼。
AZURE_CLIENT_SECRET Microsoft Entra 應用程式註冊的用戶端密碼。

接下來,使用下列範例在組態檔 設定提供者。

Microsoft Entra 提供者可在兩個不同的版本中取得。 第 1 版明確定義 userDetailsClaim ,允許承載傳回使用者資訊。 相較之下,第 2 版預設會傳回使用者資訊,並在 URL 中 openIdIssuer 指定 v2.0

Microsoft Entra 第 1 版

{
  "auth": {
    "identityProviders": {
      "azureActiveDirectory": {
        "userDetailsClaim": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
        "registration": {
          "openIdIssuer": "https://login.microsoftonline.com/<TENANT_ID>",
          "clientIdSettingName": "AZURE_CLIENT_ID",
          "clientSecretSettingName": "AZURE_CLIENT_SECRET"
        }
      }
    }
  }
}

請務必以您的 Microsoft Entra 租使用者識別碼取代 <TENANT_ID>

Microsoft Entra 第 2 版

{
  "auth": {
    "identityProviders": {
      "azureActiveDirectory": {
        "registration": {
          "openIdIssuer": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
          "clientIdSettingName": "AZURE_CLIENT_ID",
          "clientSecretSettingName": "AZURE_CLIENT_SECRET"
        }
      }
    }
  }
}

請務必以您的 Microsoft Entra 租使用者識別碼取代 <TENANT_ID>

如需如何設定 Microsoft Entra ID 的詳細資訊,請參閱 使用現有註冊的 App Service 驗證/授權檔

若要設定哪些帳戶可以登入,請參閱 修改應用程式 支援的帳戶,並將 Microsoft Entra 應用程式限制為 Microsoft Entra 租 使用者中的一組使用者。

注意

雖然 Microsoft Entra ID 的組態區段是 azureActiveDirectory ,但在 URL 的 登入、登出和清除使用者資訊時,平臺別名會設為 aad 。 如需詳細資訊, 請參閱驗證和授權 一節。

驗證回呼

識別提供者需要重新導向 URL 才能完成登入或登出要求。 大部分的提供者都需要您將回呼 URL 新增至 allowlist。 下列端點可作為重新導向目的地。

類型 URL 模式
登入 https://<YOUR_SITE>/.auth/login/<PROVIDER_NAME_IN_CONFIG>/callback
Logout https://<YOUR_SITE>/.auth/logout/<PROVIDER_NAME_IN_CONFIG>/callback

如果您使用 Microsoft Entra ID,請使用 aad 作為預留位置的值 <PROVIDER_NAME_IN_CONFIG>

注意

這些 URL 是由 Azure Static Web Apps 提供,以接收來自驗證提供者的回應,您不需要在這些路由上建立頁面。

登入、登出和使用者詳細資料

若要使用自訂識別提供者,請使用下列 URL 模式。

動作 模式
登入 /.auth/login/<PROVIDER_NAME_IN_CONFIG>
Logout /.auth/logout
使用者詳細資料 /.auth/me
清除使用者詳細資料 /.auth/purge/<PROVIDER_NAME_IN_CONFIG>

如果您使用 Microsoft Entra ID,請使用 aad 作為預留位置的值 <PROVIDER_NAME_IN_CONFIG>

管理角色

存取靜態 Web 應用程式的每個使用者都屬於一或多個角色。 使用者可屬於下列兩個內建角色:

  • anonymous :所有使用者會自動屬於 匿名 角色。
  • 驗證:登入的所有使用者都屬於 驗證的角色。

除了內建角色之外,您可以將自訂角色指派給使用者,並在 staticwebapp.config.json 檔案中 參考這些角色。

將使用者新增至角色

若要將使用者新增至角色,您可以產生邀請,讓您將使用者與特定角色產生關聯。 角色會在 staticwebapp.config.json 檔案中 定義和維護。

建立邀請

邀請是個別授權提供者特有的,因此當您選取要支援的提供者時,請考慮應用程式的需求。 有些提供者會公開使用者的電子郵件地址,而另一些提供者則只提供網站的使用者名稱。

授權提供者 公開
Microsoft Entra ID 電子郵件地址
GitHub username
Twitter username

請執行下列步驟來建立邀請。

  1. 移至Azure 入口網站 中的 靜態 Web Apps 資源。
  2. 在 [設定] 下 ,選取 [ 角色管理 ]。
  3. 選取 [邀請]
  4. 從選項清單中選取授權提供者
  5. 在 [受邀者詳細 資料] 方塊中 新增收件者的使用者名稱或電子郵件地址。
    • 針對 GitHub 和 Twitter,輸入使用者名稱。 針對所有其他專案,輸入收件者的電子郵件地址。
  6. [網域 ] 下拉式功能表中選取靜態網站的網域。
    • 您選取的網域是出現在邀請中的網域。 如果您有與網站相關聯的自訂網域,請選擇自訂網域。
  7. 在 [角色 ] 方塊中 新增以逗號分隔的角色名稱清單。
  8. 輸入您希望邀請保持有效的時數上限。
    • 最大可能限制為 168 小時,也就是 7 天。
  9. 選取 [產生]
  10. 從 [ 邀請] 連結方塊複製連結
  11. 以電子郵件將邀請連結傳送給您授與存取權的使用者。

當使用者選取邀請中的連結時,系統會提示他們使用對應的帳戶登入。 成功登入之後,使用者就會與選取的角色相關聯。

警告

請確定您的路由規則不會與您選取的驗證提供者衝突。 封鎖具有路由規則的提供者可防止使用者接受邀請。

更新角色指派

  1. 移至Azure 入口網站 中的 靜態 Web Apps 資源。
  2. 在 [設定] 下 ,選取 [ 角色管理 ]。
  3. 選取清單中的使用者。
  4. 在 [角色 ] 方塊中 編輯角色清單。
  5. 選取更新

移除使用者

  1. 移至Azure 入口網站 中的 靜態 Web Apps 資源。
  2. 在 [設定] 下 ,選取 [ 角色管理 ]。
  3. 在清單中找出使用者。
  4. 核取使用者資料列上的核取方塊。
  5. 選取刪除

當您移除使用者時,請記住下列專案:

  • 移除使用者會使其許可權失效。
  • 全球傳播可能需要幾分鐘的時間。
  • 如果使用者已新增回應用程式,則變更 userId

下一步