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

C#中使用服务主体认证调用Azure ML流水线端点遇401/403错误如何解决

问题修复方案

1. 修正令牌请求Scope配置

你两次配置的Scope都不符合Azure Machine Learning服务的要求:

  • 第一次仅传.default未指定资源前缀,Azure AD无法识别令牌的目标服务,返回的令牌受众无效,触发401错误
  • 第二次传自定义的服务主体SPN前缀,生成的令牌仅适用于你自己注册的应用,无法被Azure Machine Learning服务识别,因此返回403错误

你需要根据调用的接口类型选择正确的Scope:

  • 调用Azure资源管理平面的Pipeline提交接口,Scope填 https://management.azure.com/.default
  • 调用工作区专属的Pipeline REST端点,Scope填 https://ml.azure.com/.default

修正后的C#代码如下:

var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");

var cred = new ClientSecretCredential(tenantId, clientId, clientSecret);
// 多数Pipeline Endpoint调用场景使用management.azure.com的Scope即可
var tokenResult = cred.GetToken(new Azure.Core.TokenRequestContext(new string[] { "https://management.azure.com/.default" }));
var auth_key = tokenResult.Token;

2. 权限校验

你用Python SDK可以正常调用,说明服务主体本身的权限配置没有问题,修改Scope后基本可以解决问题。如果修改后仍然返回403,按以下步骤排查:

  • 确认C#代码读取的三个环境变量值和Python代码中使用的服务主体参数完全一致,没有误用其他服务主体的凭证
  • 确认服务主体在目标Azure Machine Learning工作区中至少被分配了数据科学家、Pipeline参与者角色,拥有提交Pipeline运行的权限
  • 确认调用接口时传入的工作区ID、资源组名、订阅ID、Pipeline Endpoint名称和Python代码中的配置完全一致,没有写错其他环境的资源参数

内容的提问来源于stack exchange,提问作者D. Reagan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:07