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

如何通过服务主体令牌访问Azure DevOps项目中的NuGet源?

通过服务主体认证访问Azure Artifacts NuGet源的C#实现

方案一:结合Azure DevOps客户端库与服务主体令牌

你可以利用Microsoft.Azure.DevOps.Client库,通过服务主体令牌建立连接后,使用专用的工件客户端操作NuGet源:

  1. 获取服务主体访问令牌
    先通过Azure.Identity库获取针对Azure DevOps资源的令牌(需确保服务主体拥有Artifacts相关权限):

    var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
    var accessToken = await credential.GetTokenAsync(new TokenRequestContext(new[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" }));
    

    注:499b84ac-1321-427f-aa17-267ca6975798是Azure DevOps的固定资源ID。

  2. 创建连接并获取工件客户端
    用令牌建立Vss连接后,获取ArtifactHttpClient即可操作NuGet源:

    var vssToken = new VssAadToken("Bearer", accessToken.Token);
    var credentials = new VssAadCredential(vssToken);
    var orgUri = new Uri("https://dev.azure.com/你的组织名");
    var connection = new VssConnection(orgUri, credentials);
    var artifactClient = connection.GetClient<ArtifactHttpClient>();
    

    示例:获取指定Feed的包列表

    var packages = await artifactClient.GetPackagesAsync("你的项目名", "你的Feed名");
    

方案二:直接为NuGet配置令牌认证

NuGet支持将服务主体令牌作为密码进行Basic认证,用户名可填任意非空值:

var feedUrl = "https://pkgs.dev.azure.com/你的组织名/_packaging/你的Feed名/nuget/v3/index.json";
var repository = Repository.CreateSource(Repository.Provider.GetCoreV3(), feedUrl);

// 用户名填任意非空值,密码用服务主体令牌
repository.PackageSource.Credentials = new NuGet.Configuration.PackageSourceCredential(
    feedUrl,
    "azuresp",
    accessToken.Token,
    true,
    "basic"
);

var findPackageResource = await repository.GetResourceAsync<FindPackageByIdResource>();
// 后续可通过findPackageResource执行包查询等操作

关键注意事项

  • 需在Azure DevOps的Feed权限设置中,为服务主体分配读取/写入权限。
  • 获取令牌时必须指定Azure DevOps的专用资源ID,否则令牌无法用于Artifacts认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:13:11