在本機使用數據 API 產生器開發解決方案,或在內部部署執行資料 API 產生器時,您需要藉由模擬具有特定角色或宣告的要求來測試已設定的驗證和授權選項。
若要在不設定驗證提供者(例如 Microsoft Entra ID)的情況下模擬已驗證的要求,您可以使用 Simulator 或 StaticWebApps 驗證提供者:
使用Simulator提供者
Simulator 是可設定的驗證提供者,可指示數據 API 產生器引擎將所有要求視為已驗證。
- 至少必須在系統角色
Authenticated的範疇中評估所有要求。 - 若有需要,請求將根據 Http 標頭中
X-MS-API-ROLE所表示的任何角色進行評估。
備註
雖然會接受所需的角色,但由於無法透過 Simulator 提供者為已驗證的使用者設定自訂宣告,因此用於定義資料庫原則的授權權限將無法運作。 請繼續至「使用StaticWebApps提供者」部分,以便測試資料庫授權政策。
1.更新運行時間設定驗證提供者
請確定您在設定檔中使用 Simulator 驗證提供者,並已指定 development 模式。 請參閱此範例配置部分 host:
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. 指定請求的角色內容
使用 Simulator 作為數據 API 產生器的驗證提供者,不需要自訂標頭將角色內容設定為系統角色 Authenticated:
curl --request GET \
--url http://localhost:5000/api/books \
若要將角色內容設定為任何其他角色,包括系統角色 Anonymous, X-MS-API-ROLE 標頭必須隨附於所需的角色:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
使用StaticWebApps提供者
驗證提供者會指示資料 API 建立器只在靜態 Web Apps 環境中執行時尋找一組 HTTP 標頭。 用戶端會在本機執行時設定這些 HTTP 標頭,以模擬已驗證的使用者,包括任何角色成員資格或自定義宣告。
備註
用戶端提供的 Http 標頭 X-MS-CLIENT-PRINCIPAL 實例只有在本機開發時才會運作,因為生產環境的 Azure Static Web Apps 會移除該標頭的所有用戶端提供實例。
請確定您在組態檔 StaticWebApps 中使用驗證提供者。 請參閱此範例host 組態段落:
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. 傳送包含生成的 X-MS-CLIENT-PRINCIPAL 標頭的請求
在本機執行數據 API 產生器並設定為使用 StaticWebApps 驗證提供者之後,您可以使用下列範本手動產生客戶端主體物件:
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
靜態 Web 應用程式的 已驗證使用者元數據 具有下列屬性:
| 房產 | 說明 |
|---|---|
| 身份提供程式 | 任何字串值。 |
| 使用者ID | 使用者的唯一標識碼。 |
| 使用者詳細資料 | 使用者的使用者名稱或電子郵件地址。 |
| 使用者角色 | 指派給使用者的角色陣列。 |
備註
如 靜態 Web Apps 文件中所述,X-MS-CLIENT-PRINCIPAL 標頭不包含 claims 陣列。
若要使用 X-MS-CLIENT-PRINCIPAL 標頭傳遞,JSON 承載必須是Base64編碼。 您可以使用任何線上或離線工具來執行此動作。 其中一個這類工具是 DevToys。 代表先前參考之 JSON 的範例 Base64 編碼承載:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
下列 cURL 要求會模擬已驗證的使用者,擷取在角色 author 的內容中可用的 Book 實體記錄清單:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'