数据 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
提供程序
身份验证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'