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

如何通过代码解决Azure Management API未授权错误以获取函数名

解决Azure Management API未授权问题(代码实现)

问题根源

调用Azure管理API必须携带Azure AD颁发的Bearer令牌,你的请求因为缺少这个令牌返回未授权。下面用代码实现令牌获取与API调用的完整流程,无需命令行操作。

步骤1:安装依赖NuGet包

先安装官方身份验证库和HTTP辅助包:

Install-Package Azure.Identity
Install-Package System.Net.Http.Json

步骤2:修改代码实现身份验证与API调用

根据运行环境选择对应的实现:

场景1:Azure环境中运行(用托管身份)

如果你的Pulumi程序在Azure Function、VM等Azure服务中运行,且已启用托管身份,代码可自动获取令牌:

using Azure.Identity;
using System.Net.Http.Headers;

var current = Pulumi.Azure.Core.GetClientConfig.InvokeAsync().Result;
var subscriptionId = current.SubscriptionId;
var appName = functionApp.Name;

// 注意:URL不要加前缀"GET ",HttpClient会自动处理请求方法
var url = $"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{appName}/functions?api-version=2022-03-01";

// DefaultAzureCredential自动适配托管身份、环境变量等多种身份源
var credential = new DefaultAzureCredential();
var tokenContext = new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com/.default" });
var accessToken = await credential.GetTokenAsync(tokenContext);

// 给请求添加Authorization头
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.Token);

var result = await httpClient.GetAsync(url);

if (!result.IsSuccessStatusCode)
{
    var errorDetails = await result.Content.ReadAsStringAsync();
    throw new Exception($"获取函数名称失败:状态码{(int)result.StatusCode},详情:{errorDetails}");
}

// 解析返回的JSON数据
var jsonContent = await result.Content.ReadAsStringAsync();
// 此处可根据需要反序列化为对象,提取函数名称列表

场景2:本地/非Azure环境运行(用服务主体)

本地运行时,先配置三个环境变量:

  • AZURE_CLIENT_ID:服务主体的应用ID
  • AZURE_CLIENT_SECRET:服务主体的密钥
  • AZURE_TENANT_ID:Azure AD租户ID

代码和场景1完全一致,DefaultAzureCredential会自动读取这些环境变量生成令牌,无需额外修改。

步骤3:给身份分配权限

不管用托管身份还是服务主体,必须给该身份分配读者角色(或更细粒度的权限)到目标Function App所在的资源组/订阅:

  • 登录Azure门户,找到目标资源组/订阅
  • 进入「访问控制(IAM)」→「添加角色分配」
  • 选择「读者」角色,搜索并选中你的身份,完成分配

关键注意点

  • 不要在URL前加GET ,这会导致请求地址无效
  • DefaultAzureCredential支持多身份源,适配本地、Azure等多种运行环境
  • 如需最小权限,可自定义RBAC角色,仅授予Microsoft.Web/sites/functions/read权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:15:34