适用于:所有 API 管理层级
通过 authentication-managed-identity 策略使用托管标识向后端服务进行身份验证。 此策略实质上是使用托管标识从 Microsoft Entra ID 获取访问令牌以访问指定资源。 成功获取令牌后,策略将使用 Authorization 方案在 Bearer 标头中设置令牌的值。 API 管理会缓存令牌,直到其过期。
在托管网关上,系统分配的身份和多个用户分配的身份都可以用来请求令牌。 如果未 client-id 提供,则假定系统分配的标识。 如果client-id提供了该属性,会向 Microsoft Entra ID 请求该用户分配身份的令牌。
在自架网关上,通过设置 authentication-provider="WorkloadIdentity"Microsoft Entra Workload ID 来使用 。 该策略使用为网关工作负载配置的身份,而非分配给 API 管理实例的托管身份。 不要向这家供应商说明 client-id 。 参见 带有工作负载身份的自托管网关。
注意
按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略。
注意
安全注意事项: 有权编辑 API 管理策略的用户可以使用此策略作为服务的托管标识进行身份验证。 但是,如果不首先将托管标识分配给 API 管理实例,则它们无法直接访问资源。 分配托管标识后,可以修改策略的用户可能能够外泄身份验证令牌,将其传播到后端,或将其记录供以后使用。 有关详细的安全指南和缓解策略,请参阅 托管标识概述中托管标识的安全注意事项 。
策略语句
<authentication-managed-identity resource="resource" client-id="clientid of user-assigned identity" authentication-provider="BuiltIn|WorkloadIdentity" output-token-variable-name="token-variable" ignore-error="true|false"/>
属性
| 属性 | 说明 | 需要 | 默认 |
|---|---|---|---|
| 资源 | 字符串。 Microsoft Entra ID 中目标 Web API(受保护的资源)的应用程序 ID。 允许使用策略表达式。 | 是 | 空值 |
| 认证提供者 | 字符串。 提供者曾获得代币。 允许的值:BuiltIn用于网关内置的托管身份认证,或WorkloadIdentity用于自托管网关上的Microsoft Entra Workload ID。 不允许使用策略表达式。 |
否 | BuiltIn |
| 客户端ID | 字符串。 Microsoft Entra ID 中用户分配标识的客户端 ID。 仅支持内置认证提供商。 不允许使用策略表达式。 | 否 | 不适用。 当 BuiltIn时,如果不存在该属性,则使用系统分配的身份。 |
| output-token-variable-name | 字符串。 上下文变量的名称,它将令牌值接收为类型为 string 的对象。 不允许使用策略表达式。 |
否 | 空值 |
| ignore-error | 布尔值。 如果设置为 true,即使未获得访问令牌,策略管道也会继续执行。 |
否 | false |
使用情况
- 策略节:入站
- 策略范围:全局、产品、API、操作
- 网关:经典、消耗、自承载
使用注意事项
如果在全局范围内定义了此策略,则获取的令牌将在所有 API 的策略执行上下文中可用,包括工作区中的令牌。 如果令牌仅适用于特定 API,请考虑在更窄的范围(例如产品或 API 级别)应用策略,而不是全局策略。
令牌转发是客户的责任。 评估此策略时,API 管理从Microsoft Entra ID获取令牌,并将其转发到
Authorization标头中的后端 as-is。 API 管理不会验证令牌发送到的后端。 客户有责任确保令牌仅转发到预期和受信任的后端服务。 仔细配置 后端实体 和其他策略,以防止将令牌发送到意外目标。
具有工作负载身份的自托管网关
要在自主机网关上使用此策略,请在策略中配置Microsoft Entra Workload ID,用于网关的工作负载和设置authentication-provider="WorkloadIdentity"。 有关设置指导,请参见 “启用自托管网关的工作负载身份认证”。
链接的指南涵盖了API管理配置端点的认证。 该策略认证请求到后端,因此也赋予工作负载身份访问该后端资源所需的权限。
示例
使用托管标识向后端服务进行身份验证
<authentication-managed-identity resource="https://microsoftgraph.chinacloudapi.cn"/>
<authentication-managed-identity resource="https://management.chinacloudapi.cn/"/> <!--Azure Resource Manager-->
<authentication-managed-identity resource="https://vault.azure.cn"/> <!--Azure Key Vault-->
<authentication-managed-identity resource="https://servicebus.chinacloudapi.cn/"/> <!--Azure Service Bus-->
<authentication-managed-identity resource="https://eventhubs.chinacloudapi.cn/"/> <!--Azure Event Hub-->
<authentication-managed-identity resource="https://storage.azure.com/"/> <!--Azure Blob Storage-->
<authentication-managed-identity resource="https://database.chinacloudapi.cn/"/> <!--Azure SQL-->
<authentication-managed-identity resource="https://signalr.azure.com"/> <!--Azure SignalR-->
<authentication-managed-identity resource="AD_application_id"/> <!--Application (client) ID of your own Azure AD Application-->
使用托管标识并手动设置标头
<authentication-managed-identity resource="AD_application_id"
output-token-variable-name="msi-access-token" ignore-error="false" /> <!--Application (client) ID of your own Azure AD Application-->
<set-header name="Authorization" exists-action="override">
<value>@("Bearer " + (string)context.Variables["msi-access-token"])</value>
</set-header>
在发送请求策略中使用托管标识
<send-request mode="new" timeout="20" ignore-error="false">
<set-url>https://example.com/</set-url>
<set-method>GET</set-method>
<authentication-managed-identity resource="ResourceID"/>
</send-request>
在自托管网关上使用工作负载身份
以下示例是利用网关工作负载的身份认证到 Azure 密钥保管库:
<authentication-managed-identity resource="https://vault.azure.cn" authentication-provider="WorkloadIdentity" />
相关策略
相关内容
有关使用策略的详细信息,请参阅:
- 教程:转换和保护 API
- 策略参考,其中提供了策略语句及其设置的完整列表
- 策略表达式
- 设置或编辑策略
- 重复使用策略配置
- 策略片段存储库
- 策略示例存储库
- Azure API 管理策略工具包