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

使用Azure SDK实现订阅级别认证并获取App Services列表遇到问题

问题核心原因

你当前使用的是服务主体(Service Principal)身份完成SDK认证,你的个人账号具备订阅Owner权限,和你代码中用到的服务主体是两个完全独立的身份,这是绝大多数同类问题的根因。

排查修复步骤
  • 确认服务主体权限配置
    进入Azure门户,打开对应订阅的「访问控制(IAM)」页面,添加角色分配,给你代码中填写的client ID对应的服务主体授予至少「Contributor」权限,涉及删除操作建议直接授予「Owner」权限。
  • 确认参数正确性
    逐一核对client ID、client secret、tenant ID、订阅ID四个参数,避免复制错误,尤其注意client secret是否已过期,过期需要到Azure AD应用注册页面重新生成有效密钥。
  • 本地调试可选更简单的认证方案
    如果你是本地开发调试,不需要用服务主体,可以直接用你自己的Azure账号登录认证,减少权限配置成本。
验证权限代码示例

你可以先运行以下代码验证认证是否生效,只要能正常输出目标订阅ID,说明认证和权限配置没有问题,再执行后续资源查询、删除操作即可,另外注意你原代码中重复定义了appServicePlans2变量,属于语法错误需要先修正:

var azurecreds = SdkContext.AzureCredentialsFactory
   .FromServicePrincipal(
       "替换为你的client ID",
       "替换为你的client secret",
       "替换为你的tenant ID",
       AzureEnvironment.AzureGlobalCloud);

var azure = Azure
    .Configure()
    .Authenticate(azurecreds);

// 先打印所有当前服务主体有权限访问的订阅,验证权限是否配置正确
foreach (var sub in azure.Subscriptions.List())
{
    Console.WriteLine($"订阅ID:{sub.SubscriptionId},订阅名称:{sub.DisplayName}");
}

// 确认有权限后再指定订阅操作资源
var targetAzure = azure.WithSubscription("替换为你的目标订阅ID");
var webApps = targetAzure.WebApps.List();
// 后续自行筛选预发布站点执行删除逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:12:01