使用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
相关产品推荐
相关产品推荐

