共用方式為


保護您的資料 API 產生器解決方案

Data API 建構器透過 REST 和 GraphQL 端點暴露你的資料。 保護你的 API 需要關注三個核心領域: 認證 (誰在打電話?)、 授權 (他們能做什麼?)以及 傳輸安全 (連線是否受到保護?)。

端對端請求流程示意圖,顯示驗證、授權及資料庫存取。

安全的三大支柱

支柱 問題會得到解答 關鍵概念
驗證 來電者是誰? 從身份提供者驗證代幣
授權 他們能做什麼? 基於角色的實體權限
運輸 連線安全嗎? 所有流量的 TLS 加密

選擇你的認證提供者

Data API 建構器支援多個認證提供者。 請選擇最適合你部署情境的方案:

Provider 用例 Guide
Microsoft Entra IDEntraID/AzureAD 使用 Microsoft 身份的生產應用程式 設定 Entra 認證
客製化 JWT 第三方 IDP(Okta、Auth0、Keycloak) 設定自訂 JWT 認證
應用程式服務 運行在 Azure App Service EasyAuth 後面的應用程式(平台標頭) 設定 App Service 認證
模擬器 本機開發和測試 設定模擬器認證
靜態網頁應用程式 透過 SWA 認證標頭保護的應用程式 設定 App Service 認證

小提示

開發時先從 模擬器 提供者開始,測試權限,無需設定身份提供者。 部署前先切換到生產服務提供者。

認證

認證用來驗證來電者的身份。 資料 API 建構器透過驗證 JWT 承載憑證(EntraID/AzureADCustom) 或信任平台提供的身份標頭(AppServiceStaticWebApps, )來驗證請求。 Simulator 跳過開發時的外部驗證。

客戶端如何使用 JWT 標記驗證資料 API 建構器的示意圖。

運作方式

  1. 對於 JWT 提供者,客戶端會從身份提供者取得一個憑證
  2. 用戶端會在標頭中傳送憑證 Authorization: Bearer <token> (JWT 提供者),或平台注入身份標頭(EasyAuth/SWA)。
  3. Data API 建構器會驗證 JWT 提供者的憑證或平台標頭(發行者、受眾、簽名)
  4. DAB 會從令牌或身份標頭中擷取使用者的角色

快速參考

Setting Description
runtime.host.authentication.provider 認證提供者 (EntraID/AzureADCustomAppServiceStaticWebApps, ) 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)來限制對實體與行動的存取。

Data API 建構器如何選擇角色並評估請求權限的示意圖。

運作方式

  1. DAB 會根據令牌和標頭為請求指派角色名稱
  2. DAB 會查詢該實體對該角色的權限
  3. 若角色擁有該請求動作的權限,DAB 會執行查詢
  4. 若不行,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')"
  }
}

監視和更新

  • 監控存取權限:利用 應用程式洞察 追蹤請求並偵測異常
  • 檢視日誌:檢查驗證失敗及權限拒絕
  • 保持 DAB 更新:透過升級至最新版本來套用安全修補程式

快速入門指南

任務 Guide
設定 Microsoft Entra 識別碼驗證 設定 Entra 認證
使用 Okta 或 Auth0 設定自訂 JWT 認證
在 Azure App Service 後方運行 設定 App Service 認證
本地權限測試 設定模擬器認證
依使用者限制列數 實施列層級安全
了解角色分配 授權和角色