通过


保护数据 API 生成器解决方案

数据 API 生成器通过 REST 和 GraphQL 终结点公开数据。 保护 API 需要注意三个核心领域: 身份验证 (谁正在调用?)、 授权 (可以做什么?)和 传输安全性 (连接是否受保护?

显示身份验证、授权和数据库访问的端到端请求流的插图。

安全三大支柱

支柱 所解答的问题 关键概念
身份验证 呼叫者是谁? 验证来自身份提供者的令牌
授权 他们可以做什么? 基于角色的实体权限
传输 连接是否安全? 所有流量的 TLS 加密

选择身份验证提供程序

数据 API 生成器支持多个身份验证提供程序。 选择与您的部署方案匹配的选项:

Provider 用例 Guide
Microsoft Entra IDEntraID/AzureAD 使用Microsoft标识的生产应用 配置 Entra 身份验证
自定义 JWT 第三方 IdP (Okta, Auth0, Keycloak) 配置自定义 JWT 身份验证
应用服务 在 Azure 应用服务 EasyAuth 后面运行的应用(平台标头) 配置应用服务身份验证
模拟器 本地开发和测试 配置模拟器身份验证
静态 Web 应用 SWA 身份验证标头前面的应用程序 配置应用服务身份验证

小窍门

在开发期间,使用模拟器提供程序来测试权限,而无需配置身份提供者。 在部署之前切换到生产环境提供商。

身份验证

身份验证会验证调用方的身份。 数据 API 生成器通过验证 JWT 持有者令牌(EntraID/AzureADCustom)或信任平台提供的标识标头(AppServiceStaticWebApps)对请求进行身份验证。 Simulator 在开发过程中跳过外部验证。

说明客户端如何使用 JWT 令牌向数据 API 生成器进行身份验证。

工作原理

  1. 对于 JWT 提供程序,客户端从身份提供商获取令牌
  2. 客户端在标头中发送令牌(JWT 提供程序)Authorization: Bearer <token> 或平台注入身份标头(EasyAuth/SWA)
  3. 数据 API 生成器验证令牌或平台标头(颁发者、受众、JWT 提供程序的签名)
  4. DAB 从令牌或标识标头中提取用户的角色

快速参考

设置 Description
runtime.host.authentication.provider 身份验证提供程序 (EntraID/AzureAD、 、 CustomAppServiceStaticWebApps、 、 ) Simulator
runtime.host.authentication.jwt.audience JWT 提供程序的预期受众声明(不适用于 AppService/StaticWebApps/模拟器)
runtime.host.authentication.jwt.issuer JWT 提供程序的预期颁发者/颁发机构(AppService/StaticWebApps/模拟器不使用)

有关详细配置,请参阅 配置Microsoft Entra ID 身份验证

授权

授权决定经过身份验证的(或匿名)用户可以执行的操作。 数据 API 生成器使用基于角色的访问控制(RBAC)来限制对实体和作的访问。

说明数据 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')"
  }
}

监视和更新

  • 监视访问:使用 Application Insights 跟踪请求并检测异常
  • 查看日志:检查失败的身份验证尝试和权限拒绝
  • 使 DAB 保持更新:通过升级到最新版本来应用安全修补程序

快速入门指南

任务 Guide
设置 Microsoft Entra ID 身份验证 配置 Entra 身份验证
使用 Okta 或 Auth0 配置自定义 JWT 身份验证
在 Azure 应用服务后面运行 配置应用服务身份验证
在本地测试权限 配置模拟器身份验证
按用户限制行 实现行级别安全性
了解角色分配 授权和角色