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

如何配置Azure Functions的TokenRequestContext作用域及跨函数认证

Azure Function 跨函数调用认证(本地+部署环境)

一、激活api://{someGuid}/.default作用域的正确方式

api://{someGuid}/.default是目标Azure Function App托管标识对应的默认作用域,其中{someGuid}是目标函数App托管标识的客户端ID(可在Azure门户目标函数的“身份”页面查看)。

使用该作用域的代码示例:

var tokenRequestContext = new TokenRequestContext(new[] {"api://xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/.default"});

要正常激活这个作用域,需确保:

  • 目标函数App已启用系统分配或用户分配托管标识
  • 源函数(或本地调试账号)拥有访问目标函数的权限

二、本地测试“获取令牌但未授权”的解决办法

1. 检查令牌受众(aud)是否匹配

本地获取令牌后,通过JWT解析工具查看令牌的aud字段,确认是否与目标函数的受众一致:

  • 若目标函数用api://{客户端ID}作为受众,aud需为api://xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • 若用函数域名,aud需为https://your-function-app.azurewebsites.net

2. 给本地开发账号添加目标函数访问权限

在Azure门户操作:

  • 进入目标函数App的身份验证页面,确保已启用Azure AD身份提供者
  • 打开目标函数对应的Azure AD应用注册,在“用户和组”中添加你的本地开发账号(即你通过az login登录的账号)
  • 或在目标函数的访问控制(IAM)中,给你的账号添加函数应用参与者角色

3. 本地调试时使用正确的凭据获取令牌

本地调试需用DefaultAzureCredential获取令牌,它会自动适配本地开发环境(优先使用az login的账号):

var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(tokenRequestContext);
// 给HttpClient添加授权头
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);

三、部署后跨函数调用的认证配置

  1. 源函数App启用托管标识:在Azure门户源函数的“身份”页面,启用系统分配托管标识(或创建用户分配托管标识)
  2. 给源函数托管标识添加目标函数权限:
    • 进入目标函数App的访问控制(IAM),添加角色分配,选择函数应用参与者角色,将源函数的托管标识作为成员添加
  3. 部署后的令牌请求代码:
    部署环境中DefaultAzureCredential会自动使用源函数的托管标识获取令牌,代码与本地调试一致,无需额外修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:22:28