数据 API 生成器中的本地身份验证

在本地使用数据 API 生成器开发解决方案或在本地运行数据 API 生成器时,需要通过模拟具有特定角色或声明的请求来测试配置的身份验证和授权选项。

若要在不配置身份验证提供程序(例如 Microsoft Entra ID)的情况下模拟经过身份验证的请求,可以使用 Simulator 身份验证提供程序或 StaticWebApps 身份验证提供程序:

使用Simulator提供程序

Simulator 是可配置的身份验证提供程序,指示数据 API 生成器引擎将所有请求视为经过身份验证。

  • 至少会在系统角色 Authenticated的上下文中评估所有请求。
  • 如果需要,将在 Http 标头中表示的任何角色的 X-MS-API-ROLE 上下文中评估请求。

注释

尽管所需的角色将被尊重,但授权权限的设置将不起作用,因为无法使用Simulator提供程序为经过身份验证的用户设置自定义声明。 继续阅读“ 使用 StaticWebApps 提供程序 测试数据库授权策略”部分。

1.更新运行时配置身份验证提供程序

请确保在配置文件中指定了 Simulator 身份验证提供程序和 development 模式。 请参阅此示例 host 配置部分:

"host": {
  "mode": "development",
  "authentication": {
    "provider": "Simulator"
  }
}

2. 指定请求的角色上下文

作为 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' \

使用StaticWebApps提供程序

身份验证提供商指示 Data API 构建器仅查找一组仅在静态 Web 应用程序环境中运行时存在的 HTTP 标头。 客户端在本地运行时设置这些 HTTP 标头,以模拟经过身份验证的用户,包括任何角色成员身份或自定义声明。

注释

客户端提供的 Http 标头 X-MS-CLIENT-PRINCIPAL实例仅在本地开发时工作,因为生产 Azure Static Web Apps 环境 会删除该标头的所有客户端提供的实例

请确保在配置文件中使用 StaticWebApps 身份验证提供程序。 请参阅此示例 host 配置部分:

"host": {
  "mode": "development",
  "authentication": {
    "provider": "StaticWebApps"
  }
}

1.发送请求时提供生成的 X-MS-CLIENT-PRINCIPAL 标头

数据 API 生成器在本地运行并配置为使用 StaticWebApps 身份验证提供程序后,可以使用以下模板手动生成客户端主体对象:

{  
  "identityProvider": "test",
  "userId": "12345",
  "userDetails": "john@contoso.com",
  "userRoles": ["author", "editor"]
}

静态 Web 应用的 经过身份验证的用户元数据 具有以下属性:

资产 DESCRIPTION
身份提供程序 任何字符串值。
userId 用户的唯一标识符。
用户详情 用户的用户名或电子邮件地址。
用户角色 用户分配的角色的数组。

注释

静态 Web 应用文档中所述, X-MS-CLIENT-PRINCIPAL 标头不包含 claims 数组。

若要使用 X-MS-CLIENT-PRINCIPAL 标头传递,JSON 有效负载必须经过 Base64 编码。 可以使用任何联机或脱机工具执行此作。 其中一种工具是 DevToys。 示例 Base64 编码的有效载荷,代表之前提到的 JSON。

eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9

以下 cURL 请求模拟一个经过身份验证的用户在author角色上下文中检索可用的Book实体记录列表:

curl --request GET \
  --url http://localhost:5000/api/books \
  --header 'X-MS-API-ROLE: author' \
  --header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'