数据 API 生成器通过 REST 和 GraphQL 终结点公开数据。 保护 API 需要注意三个核心领域: 身份验证 (谁正在调用?)、 授权 (可以做什么?)和 传输安全性 (连接是否受保护?
安全三大支柱
| 支柱 | 所解答的问题 | 关键概念 |
|---|---|---|
| 身份验证 | 呼叫者是谁? | 验证来自身份提供者的令牌 |
| 授权 | 他们可以做什么? | 基于角色的实体权限 |
| 传输 | 连接是否安全? | 所有流量的 TLS 加密 |
选择身份验证提供程序
数据 API 生成器支持多个身份验证提供程序。 选择与您的部署方案匹配的选项:
| Provider | 用例 | Guide |
|---|---|---|
Microsoft Entra ID (EntraID/AzureAD) |
使用Microsoft标识的生产应用 | 配置 Entra 身份验证 |
| 自定义 JWT | 第三方 IdP (Okta, Auth0, Keycloak) | 配置自定义 JWT 身份验证 |
| 应用服务 | 在 Azure 应用服务 EasyAuth 后面运行的应用(平台标头) | 配置应用服务身份验证 |
| 模拟器 | 本地开发和测试 | 配置模拟器身份验证 |
| 静态 Web 应用 | SWA 身份验证标头前面的应用程序 | 配置应用服务身份验证 |
小窍门
在开发期间,使用模拟器提供程序来测试权限,而无需配置身份提供者。 在部署之前切换到生产环境提供商。
身份验证
身份验证会验证调用方的身份。 数据 API 生成器通过验证 JWT 持有者令牌(EntraID/AzureAD, Custom)或信任平台提供的标识标头(AppService, StaticWebApps)对请求进行身份验证。
Simulator 在开发过程中跳过外部验证。
工作原理
- 对于 JWT 提供程序,客户端从身份提供商获取令牌
- 客户端在标头中发送令牌(JWT 提供程序)
Authorization: Bearer <token>或平台注入身份标头(EasyAuth/SWA) - 数据 API 生成器验证令牌或平台标头(颁发者、受众、JWT 提供程序的签名)
- 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)来限制对实体和作的访问。
工作原理
- 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')"
}
}
监视和更新
- 监视访问:使用 Application Insights 跟踪请求并检测异常
- 查看日志:检查失败的身份验证尝试和权限拒绝
- 使 DAB 保持更新:通过升级到最新版本来应用安全修补程序
快速入门指南
| 任务 | Guide |
|---|---|
| 设置 Microsoft Entra ID 身份验证 | 配置 Entra 身份验证 |
| 使用 Okta 或 Auth0 | 配置自定义 JWT 身份验证 |
| 在 Azure 应用服务后面运行 | 配置应用服务身份验证 |
| 在本地测试权限 | 配置模拟器身份验证 |
| 按用户限制行 | 实现行级别安全性 |
| 了解角色分配 | 授权和角色 |