我正在尝试使用 C# 中的服务主体身份验证来获取 Azure Artifacts(通过 Azure DevOps 中的 Nuget feed),但无法找到一个好的方法。有谁知道是否有对此的现有支持?
在示例代码中,它使用 SP 令牌通过 SP 访问令牌访问 DevOps 组件,例如工作项和管道。但是,我找不到 Nuget feeds 这样的工件的等效组件:
var vssAadToken = new VssAadToken("Bearer", accessToken.Token);
var vssAadCredentials = new VssAadCredential(vssAadToken);
var orgUrl = new Uri(new Uri(AdoBaseUrl), AdoOrgName);
var connection = new VssConnection(orgUrl, vssAadCredentials);
var client = connection.GetClient<**WorkItemTrackingHttpClient**>();
我发现的另一种方法是使用 Nuget 库,但似乎它只支持用户名和密码身份验证,在我的情况下我想使用访问令牌:
var repository = Repository.CreateSource(Repository.Provider.GetCoreV3(), "FeedUrl");
repository.PackageSource.Credentials = new NuGet.Configuration.PackageSourceCredential("FeedUrl", **userName**, **password**, true, "basic");
return await repository.GetResourceAsync<FindPackageByIdResource>();
您可以使用服务主体通过 OAuth 2.0 客户端凭据流向 Azure DevOps 进行身份验证。有一个示例项目供您参考,其中演示了如何使用适用于 .NET 的 Azure Identity 客户端库获取服务主体的 Azure AD 访问令牌,并向 Azure DevOps 进行身份验证以创建或获取工作项。同样的方法可以访问 Azure DevOps 中的其他资源,而不仅仅是工作项。
要使用服务主体下载工件,有一些注意事项: