在ASP.NET Core MVC中使用联合凭据生成令牌获取Azure DevOps工作项
在ASP.NET Core MVC中通过联合凭据生成VssOAuthAccessTokenCredential的访问令牌
要实现无需密钥或证书,仅通过联合凭据生成VssOAuthAccessTokenCredential可用的访问令牌,可借助DefaultAzureCredential自动获取符合要求的令牌,具体实现如下:
必要依赖
首先安装两个NuGet包:
Azure.Identity:提供DefaultAzureCredential实现Microsoft.VisualStudio.Services.Client:提供VssOAuthAccessTokenCredential及Azure DevOps API客户端
完整示例代码
在ASP.NET Core MVC控制器中,可按以下方式实现:
using Azure.Identity; using Microsoft.VisualStudio.Services.Client; using Microsoft.VisualStudio.Services.OAuth; using Microsoft.VisualStudio.Services.WebApi; public class AzureDevOpsController : Controller { public async Task<IActionResult> Index() { // 初始化DefaultAzureCredential,自动适配多种联合凭据场景 // 本地开发用Azure CLI登录凭据,Azure部署环境用托管标识 var azureCredential = new DefaultAzureCredential(); // 请求Azure DevOps的访问令牌,固定作用域为https://dev.azure.com/.default var tokenContext = new TokenRequestContext(new[] { "https://dev.azure.com/.default" }); var tokenResult = await azureCredential.GetTokenAsync(tokenContext); // 用获取到的令牌创建VssOAuthAccessTokenCredential var vssCredential = new VssOAuthAccessTokenCredential(tokenResult.Token); // 示例:创建Azure DevOps连接并调用API var orgUrl = new Uri("https://dev.azure.com/你的组织名"); using var connection = new VssConnection(orgUrl, vssCredential); // 获取项目列表示例 var projectClient = await connection.GetClientAsync<ProjectHttpClient>(); var projects = await projectClient.GetProjects(); return View(projects); } }
关键说明
- 联合凭据适配逻辑:
DefaultAzureCredential会按顺序尝试多种凭据来源,包括本地Azure CLI会话、Azure托管标识、Visual Studio登录凭据等,全程无需手动配置密钥或证书 - 权限配置:
- 本地开发时,确保已通过
az login登录有权限访问目标Azure DevOps组织的账号 - 部署到Azure时,需给应用服务/虚拟机等资源配置托管标识,并在Azure DevOps组织中给该标识分配对应权限(如项目贡献者)
- 本地开发时,确保已通过
- 令牌作用域:必须使用
https://dev.azure.com/.default作为作用域,这是Azure DevOps接受的OAuth2资源标识符
内容的提问来源于stack exchange,提问作者user26817732
相关产品推荐
相关产品推荐

