Azure Static Web Apps 中的自訂驗證
Azure Static Web Apps 提供 受控驗證 ,使用由 Azure 管理的提供者註冊。 若要啟用註冊的彈性,您可以使用自訂註冊覆寫預設值。
注意
自訂驗證僅適用于 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 |
username |
請執行下列步驟來建立邀請。
- 移至Azure 入口網站 中的 靜態 Web Apps 資源。
- 在 [設定] 下 ,選取 [ 角色管理 ]。
- 選取 [邀請]。
- 從選項清單中選取授權提供者 。
- 在 [受邀者詳細 資料] 方塊中 新增收件者的使用者名稱或電子郵件地址。
- 針對 GitHub 和 Twitter,輸入使用者名稱。 針對所有其他專案,輸入收件者的電子郵件地址。
- 從 [網域 ] 下拉式功能表中選取靜態網站的網域。
- 您選取的網域是出現在邀請中的網域。 如果您有與網站相關聯的自訂網域,請選擇自訂網域。
- 在 [角色 ] 方塊中 新增以逗號分隔的角色名稱清單。
- 輸入您希望邀請保持有效的時數上限。
- 最大可能限制為 168 小時,也就是 7 天。
- 選取 [產生]。
- 從 [ 邀請] 連結方塊複製連結 。
- 以電子郵件將邀請連結傳送給您授與存取權的使用者。
當使用者選取邀請中的連結時,系統會提示他們使用對應的帳戶登入。 成功登入之後,使用者就會與選取的角色相關聯。
警告
請確定您的路由規則不會與您選取的驗證提供者衝突。 封鎖具有路由規則的提供者可防止使用者接受邀請。
更新角色指派
- 移至Azure 入口網站 中的 靜態 Web Apps 資源。
- 在 [設定] 下 ,選取 [ 角色管理 ]。
- 選取清單中的使用者。
- 在 [角色 ] 方塊中 編輯角色清單。
- 選取更新。
移除使用者
- 移至Azure 入口網站 中的 靜態 Web Apps 資源。
- 在 [設定] 下 ,選取 [ 角色管理 ]。
- 在清單中找出使用者。
- 核取使用者資料列上的核取方塊。
- 選取刪除。
當您移除使用者時,請記住下列專案:
- 移除使用者會使其許可權失效。
- 全球傳播可能需要幾分鐘的時間。
- 如果使用者已新增回應用程式,則變更
userId
。