你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:所有 API 管理层级
通过 authentication-managed-identity 策略使用托管标识向后端服务进行身份验证。 此策略实质上使用托管标识从Microsoft Entra ID获取访问令牌,以便访问指定的资源。 成功获取令牌后,策略将使用 Authorization 方案在 Bearer 标头中设置令牌的值。 API 管理会缓存令牌,直到其过期。
系统分配的标识和多个用户分配的标识都可用来请求令牌。 如果未 client-id 提供,则假定系统分配的标识。 如果提供了 client-id 变量,则会从Microsoft Entra ID请求该用户分配标识的令牌。
注意
按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略。
注意
安全注意事项: 有权编辑 API 管理策略的用户可以使用此策略作为服务的托管标识进行身份验证。 但是,如果不首先将托管标识分配给 API 管理实例,则它们无法直接访问资源。 分配托管标识后,可以修改策略的用户可能能够外泄身份验证令牌,将其传播到后端,或将其记录供以后使用。 有关详细的安全指南和缓解策略,请参阅 托管标识概述中托管标识的安全注意事项 。
策略语句
<authentication-managed-identity resource="resource" client-id="clientid of user-assigned identity" output-token-variable-name="token-variable" ignore-error="true|false"/>
属性
| 属性 | 说明 | 需要 | 默认 |
|---|---|---|---|
| 资源 | 字符串。 Microsoft Entra ID中目标 Web API(受保护的资源)的应用程序 ID。 允许使用策略表达式。 | 是 | 空值 |
| 客户端ID | 字符串。 Microsoft Entra ID中用户分配标识的客户端 ID。 不允许使用策略表达式。 | 否 | 不适用。 如果属性不存在,则使用系统分配的标识。 |
| output-token-variable-name | 字符串。 上下文变量的名称,它将令牌值接收为类型为 string 的对象。 不允许使用策略表达式。 |
否 | 空值 |
| ignore-error | 布尔值。 如果设置为 true,即使未获得访问令牌,策略管道也会继续执行。 |
否 | false |
使用情况
- 策略节:入站
- 策略范围:全局、产品、API、操作
- 网关:经典、v2、消耗、自承载
使用注意事项
如果在全局范围内定义了此策略,则获取的令牌将在所有 API 的策略执行上下文中可用,包括工作区中的令牌。 如果令牌仅适用于特定 API,请考虑在更窄的范围(例如产品或 API 级别)应用策略,而不是全局策略。
令牌转发是客户的责任。 评估此策略时,API 管理从Microsoft Entra ID获取令牌,并将其转发到
Authorization标头中的后端 as-is。 API 管理不会验证令牌发送到的后端。 客户有责任确保令牌仅转发到预期和受信任的后端服务。 仔细配置 后端实体 和其他策略,以防止将令牌发送到意外目标。
示例
使用托管标识向后端服务进行身份验证
<authentication-managed-identity resource="https://graph.microsoft.com"/>
<authentication-managed-identity resource="https://cognitiveservices.azure.com"/> <!--Azure OpenAI-->
<authentication-managed-identity resource="https://management.azure.com/"/> <!--Azure Resource Manager-->
<authentication-managed-identity resource="https://vault.azure.net"/> <!--Azure Key Vault-->
<authentication-managed-identity resource="https://servicebus.azure.net/"/> <!--Azure Service Bus-->
<authentication-managed-identity resource="https://eventhubs.azure.net/"/> <!--Azure Event Hub-->
<authentication-managed-identity resource="https://storage.azure.com/"/> <!--Azure Blob Storage-->
<authentication-managed-identity resource="https://database.windows.net/"/> <!--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>
相关策略
相关内容
有关使用策略的详细信息,请参阅:
- 教程:转换和保护 API
- 策略参考,其中提供了策略语句及其设置的完整列表
- 策略表达式
- 设置或编辑策略
- 重复使用策略配置
- Policy 代码片段存储库
- Policy 示例存储库
- Azure API 管理策略工具包
- Get Copilot帮助创建、解释和排查策略问题