使用托管标识进行身份验证

适用于:所有 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" />

有关使用策略的详细信息,请参阅: