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