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

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

若要模拟经过身份验证的请求,而不配置身份验证提供程序 ((例如 Microsoft Entra ID,例如) ),可以使用 SimulatorStaticWebApps 身份验证提供程序:

使用 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 提供程序

身份验证StaticWebApps提供程序指示数据 API 生成器查找仅在Static Web Apps环境中运行时存在的一组 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 应用的 经过身份验证的用户元数据 具有以下属性:

属性 说明
identityProvider 任何字符串值。
userId 用户的唯一标识符。
userDetails 用户的用户名或电子邮件地址。
userRoles 用户的已分配角色的数组。

注意

Static Web Apps文档中所述, X-MS-CLIENT-PRINCIPAL 标头不包含 claims 数组。

为了与 标头一起 X-MS-CLIENT-PRINCIPAL 传递,JSON 有效负载必须是 Base64 编码的。 可以使用任何联机或脱机工具来执行此操作。 其中一个工具是 DevToys。 表示以前引用的 JSON 的示例 Base64 编码有效负载:

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'