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

如何在Azure Pipeline中调用配置Azure Active Directory认证的Function App

可行解决方案

1 先修正服务主体权限配置

非交互式场景调用受AAD保护的Function App,必须使用应用权限而非委托权限,这是绝大多数401错误的根因:

  • 进入Function App关联的AAD应用注册页,切换到「暴露API」标签,新增一个应用权限,例如命名为Invoke.Function,权限类型选应用
  • 进入Pipeline所用服务主体的应用注册页,切换到「API权限」标签,添加刚才创建的Invoke.Function权限,必须点击授予租户管理员同意完成权限生效
  • 如果你用的是Pipeline托管身份,直接给托管身份授予上述应用权限即可,无需额外维护密钥

2 Pipeline中正确获取令牌并调用

使用Azure CLI任务调用的示例配置如下:

- task: AzureCLI@2
  inputs:
    azureSubscription: '<绑定了对应服务主体/托管身份的Azure服务连接名称>'
    scriptType: 'bash'
    inlineScript: |
      # 替换为你Function App对应的应用ID URI
      FUNC_APP_RES_ID="api://<你的Function App应用注册ID>"
      # 获取对应资源的访问令牌
      ACCESS_TOKEN=$(az account get-access-token --resource $FUNC_APP_RES_ID --query accessToken -o tsv)
      # 携带令牌调用Function App端点
      curl -H "Authorization: Bearer $ACCESS_TOKEN" https://<你的Function App域名>/api/<触发器路径>

如果你不想用Azure CLI,也可以直接调用OAuth2客户端凭据流获取令牌:

  • 令牌请求地址:https://login.microsoftonline.com/<你的AAD租户ID>/oauth2/v2.0/token
  • 请求参数为:grant_type=client_credentials&client_id=<服务主体ID>&client_secret=<服务主体密钥>&scope=<你的Function App应用ID URI>/.default

3 401错误快速排查

如果配置完成后仍返回401,按以下步骤校验:

  • 把获取到的JWT令牌复制到本地解析,检查aud(受众)字段是否和Function App的应用ID URI一致,不一致说明获取令牌时的资源参数填错
  • 检查令牌的roles字段是否包含你授予的应用权限,没有的话说明权限未授予、未点管理员同意,或者权限类型选成了委托权限
  • 检查Function App的易鉴权配置,确认「允许的令牌受众」列表中已添加你使用的应用ID URI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:39:01