Data API 建構器透過 REST 和 GraphQL 端點暴露你的資料。 保護你的 API 需要關注三個核心領域: 認證 (誰在打電話?)、 授權 (他們能做什麼?)以及 傳輸安全 (連線是否受到保護?)。
安全的三大支柱
| 支柱 | 問題會得到解答 | 關鍵概念 |
|---|---|---|
| 驗證 | 來電者是誰? | 從身份提供者驗證代幣 |
| 授權 | 他們能做什麼? | 基於角色的實體權限 |
| 運輸 | 連線安全嗎? | 所有流量的 TLS 加密 |
選擇你的認證提供者
Data API 建構器支援多個認證提供者。 請選擇最適合你部署情境的方案:
| Provider | 用例 | Guide |
|---|---|---|
Microsoft Entra ID (EntraID/AzureAD) |
使用 Microsoft 身份的生產應用程式 | 設定 Entra 認證 |
| 客製化 JWT | 第三方 IDP(Okta、Auth0、Keycloak) | 設定自訂 JWT 認證 |
| 應用程式服務 | 運行在 Azure App Service EasyAuth 後面的應用程式(平台標頭) | 設定 App Service 認證 |
| 模擬器 | 本機開發和測試 | 設定模擬器認證 |
| 靜態網頁應用程式 | 透過 SWA 認證標頭保護的應用程式 | 設定 App Service 認證 |
小提示
開發時先從 模擬器 提供者開始,測試權限,無需設定身份提供者。 部署前先切換到生產服務提供者。
認證
認證用來驗證來電者的身份。 資料 API 建構器透過驗證 JWT 承載憑證(EntraID/AzureAD, Custom) 或信任平台提供的身份標頭(AppService, StaticWebApps, )來驗證請求。
Simulator 跳過開發時的外部驗證。
運作方式
- 對於 JWT 提供者,客戶端會從身份提供者取得一個憑證
- 用戶端會在標頭中傳送憑證
Authorization: Bearer <token>(JWT 提供者),或平台注入身份標頭(EasyAuth/SWA)。 - Data API 建構器會驗證 JWT 提供者的憑證或平台標頭(發行者、受眾、簽名)
- DAB 會從令牌或身份標頭中擷取使用者的角色
快速參考
| Setting | Description |
|---|---|
runtime.host.authentication.provider |
認證提供者 (EntraID/AzureAD, Custom, AppService, StaticWebApps, ) Simulator |
runtime.host.authentication.jwt.audience |
JWT 提供者的預期受眾聲明(未被 AppService/StaticWebApps/Simulator 使用) |
runtime.host.authentication.jwt.issuer |
JWT 提供者的預期發行者/權威機構(AppService/StaticWebApps/Simulator 的不使用者) |
詳細設定請參見 「配置 Microsoft Entra ID 認證」。
授權
授權決定了經過認證(或匿名)的使用者能做什麼。 Data API 建構器使用角色基礎存取控制(RBAC)來限制對實體與行動的存取。
運作方式
- DAB 會根據令牌和標頭為請求指派角色名稱
- DAB 會查詢該實體對該角色的權限
- 若角色擁有該請求動作的權限,DAB 會執行查詢
- 若不行,DAB 會回傳回應
403 Forbidden
系統角色與使用者角色
| 角色類型 | Description |
|---|---|
Anonymous |
當沒有認證身份存在時,會被指派 |
Authenticated |
當請求被認證(JWT 接受或受信任平台標頭)且未選擇特定使用者角色時,會指派 |
| 使用者角色 | 從權杖 roles 的主張中選擇的自訂角色(或平台角色),透過 X-MS-API-ROLE 標頭選擇 |
預設保護
實體 預設沒有權限。 您必須明確授權存取權限:
{
"entities": {
"Book": {
"permissions": [
{ "role": "authenticated", "actions": ["read"] }
]
}
}
}
詳細配置請參見 授權與角色。
列級與場級安全
超越實體層級權限,採用細緻的存取控制:
| 特徵 / 功能 | Description | Guide |
|---|---|---|
| 資料庫政策(列層安全性) | 將政策表達式轉換為查詢謂詞,根據宣告或會話內容過濾資料列 | 實作列層級安全性 |
| 欄位層級安全性 | 依角色包含或排除特定欄位 | 字段存取 |
傳輸與配置安全
運輸安全性
- 所有連線都使用 TLS:加密用戶端與 DAB 之間的流量
- 停用舊有 TLS 版本:只依賴 TLS 1.2+
- 使用 HTTPS 端點:在生產環境中切勿在未加密的 HTTP 上暴露 DAB
詳情請參閱 安全最佳實務。
設定安全性
-
將秘密儲存在環境變數中:在你的設定中使用
@env('SECRET_NAME') -
使用 Azure Key Vault:與
@azure('key-vault-uri')引用密鑰 -
絕不透露秘密:避免
dab-config.json使用密碼和連線串
{
"data-source": {
"connection-string": "@env('SQL_CONNECTION_STRING')"
}
}
監視和更新
快速入門指南
| 任務 | Guide |
|---|---|
| 設定 Microsoft Entra 識別碼驗證 | 設定 Entra 認證 |
| 使用 Okta 或 Auth0 | 設定自訂 JWT 認證 |
| 在 Azure App Service 後方運行 | 設定 App Service 認證 |
| 本地權限測試 | 設定模擬器認證 |
| 依使用者限制列數 | 實施列層級安全 |
| 了解角色分配 | 授權和角色 |