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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:27:04