You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure中如何让系统托管身份的Logic App访问Entra ID认证的API

问题背景

我们已完成Azure API Manager(APIM)从订阅密钥到Entra ID的迁移,标准用户场景运行正常,操作步骤如下:

  • 创建APIM实例并为其分配系统托管身份
  • 创建后端应用auth-test-app
  • 为该应用暴露API,设置应用ID URI为api://auth-test-app
  • 创建范围auth-test-app.readWrite
  • 创建客户端应用auth-test-client
  • 为auth-test-client申请API访问权限
  • 配置密钥后可通过Postman正常访问API

现在需要让Azure Logic App使用其系统分配的托管身份访问该API,但使用auth-test-app的App ID作为受众时被拒绝访问,且找不到有效文档。需明确两个问题:

  1. 受众应配置为URI、auth-test-app的App ID还是其他值?
  2. 如何控制哪些应用可访问该API,是否可创建特定范围的权限分配?
解决方案

1. 受众的正确配置值

受众必须配置为后端应用auth-test-app中设置的应用ID URI(即api://auth-test-app),而非应用ID。

当Logic App通过托管身份请求访问令牌时,需指定该URI作为aud参数值。若使用应用ID作为受众,Entra ID返回的令牌会与APIM中配置的受众验证规则不匹配,直接导致访问被拒。

2. 应用访问控制与范围权限分配

可以通过Entra ID的应用权限分配机制,精准控制包括托管身份在内的应用对API的访问,且可绑定到特定范围:

  • 为Logic App托管身份分配API权限
    在Entra ID中找到Logic App的系统托管身份(本质是一个服务主体),进入「API权限」页面,点击「添加权限」,选择「我的API」分类下的auth-test-app,勾选所需范围(如auth-test-app.readWrite),最后完成权限添加及管理员同意(应用权限需管理员同意,委托权限视场景而定)。
  • 在APIM中配置验证策略
    在APIM的API验证策略里,确保JWT令牌验证规则同时检查aud和scp声明:
    <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized">
        <openid-config url="https://login.microsoftonline.com/{你的租户ID}/v2.0/.well-known/openid-configuration" />
        <required-claims>
            <claim name="aud" match="any">
                <value>api://auth-test-app</value>
            </claim>
            <claim name="scp" match="any">
                <value>auth-test-app.readWrite</value>
            </claim>
        </required-claims>
    </validate-jwt>
    
  • 更细粒度的访问控制
    还可为auth-test-app创建应用角色,将Logic App的托管身份分配到对应角色,然后在APIM策略中检查roles声明,实现基于角色的访问控制。

内容的提问来源于stack exchange,提问作者vrghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:01