如何获取Azure DevOps访问令牌并调用REST API拉取Azure Pipeline列表
解决Azure DevOps REST API调用返回HTML异常问题
你当前获取的令牌为Azure资源管理服务的默认令牌,未指定Azure DevOps的资源权限范围,因此接口请求会被重定向到登录页,返回HTML格式的错误响应。
有效访问令牌获取方式
方式1:个人访问令牌(PAT,最快捷适合开发测试)
- 在Azure DevOps门户右上角用户设置中生成PAT,权限勾选*
Pipelines > Read* - 调用接口时Authorization头使用Basic认证格式:
Basic ${Buffer.from(:${你的PAT}).toString('base64')}
方式2:Azure AD OAuth令牌(适合生产服务场景)
- 使用Azure相关身份库获取令牌时必须指定Azure DevOps的固定资源scope:
499b84ac-1321-427f-aa17-267ca6975798/.default - 不指定该参数获取的令牌默认仅适用于Azure资源管理接口,无法调用DevOps服务接口
完整Node.js调用示例
const axios = require('axios'); // 替换为你自己的实际配置 const ORGANIZATION = "你的组织名"; const PROJECT = "你的项目名"; // 此处用PAT做示例,使用Azure AD令牌的话替换成正确的Bearer令牌即可 const ACCESS_TOKEN = "你生成的PAT或者Azure AD有效令牌"; async function getPipelineList() { const url = `https://dev.azure.com/${ORGANIZATION}/${PROJECT}/_apis/pipelines?api-version=6.0`; let authHeader; // 区分PAT和Azure AD令牌的认证头格式 if (ACCESS_TOKEN.length < 50) { // PAT长度通常较短,可根据实际场景调整判断逻辑 authHeader = `Basic ${Buffer.from(`:${ACCESS_TOKEN}`).toString('base64')}`; } else { authHeader = `Bearer ${ACCESS_TOKEN}`; } try { const response = await axios.get(url, { headers: { Authorization: authHeader } }); return response.data; } catch (err) { console.error("调用失败:", err.response?.data || err.message); throw err; } } // 调用示例 getPipelineList().then(res => console.log("Pipeline列表:", res));
原有代码的问题修正点
- 替换url中的
{organization}和{project}为实际值,不可保留占位符 - 不要使用预览版API,直接用正式版
api-version=6.0避免兼容性问题 - 确认请求配置中头信息的参数名为
headers,避免拼写错误导致令牌未传递
内容的提问来源于stack exchange,提问作者Param
相关产品推荐
相关产品推荐

