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

如何通过Azure AD令牌实现Azure DevOps PATs API身份认证?

解决Azure DevOps PAT API权限不足问题

针对你在Node.js Azure Function中调用Azure DevOps PAT API遇到的权限问题,以下是具体的排查和解决步骤:

1. 确认Entra ID应用的权限类型与授权

客户端凭证流属于应用权限,而非委托权限,必须确保你配置的是正确的权限类型:

  • 进入Microsoft Entra ID -> 应用注册 -> 你的应用 -> API权限
  • 删除所有已添加的委托权限,重新添加Azure DevOps的应用权限:vso.tokenadministration(管理PAT)和vso.tokens(读取PAT)
  • 点击「授予管理员同意」,确保权限状态显示为「已同意」

2. 在Azure DevOps组织中授权服务主体

仅在Entra ID配置权限不够,还需在Azure DevOps组织内给服务主体分配对应权限:

  • 登录你的Azure DevOps组织 -> 进入「组织设置」-> 「权限」-> 「服务主体」
  • 搜索你的Entra ID应用名称,将其添加到组织中
  • 将该服务主体加入Project Collection Administrators组,或单独分配「Token Administrator」角色(编辑权限时勾选「Token Administration」相关权限)

3. 验证访问令牌的有效性

使用jwt.ms解码你获取到的访问令牌,检查以下内容:

  • aud(受众)必须是499b84ac-1321-427f-aa17-267ca6975798(Azure DevOps的资源ID)
  • roles字段中必须包含vso.tokenadministration和vso.tokens权限

4. 调整MSAL客户端与API调用代码

确保MSAL配置使用正确的应用权限scope,示例代码如下:

const msal = require('@azure/msal-node');

// MSAL配置
const msalConfig = {
    auth: {
        clientId: '你的客户端ID',
        authority: 'https://login.microsoftonline.com/你的租户ID',
        clientSecret: '你的客户端密钥'
    }
};

const cca = new msal.ConfidentialClientApplication(msalConfig);

// 获取应用权限令牌
async function acquireAadToken() {
    const tokenResponse = await cca.acquireTokenByClientCredential({
        scopes: ['https://vssps.dev.azure.com/.default']
    });
    return tokenResponse.accessToken;
}

// 调用PAT列表API
async function listOrganizationPATs(orgName) {
    const accessToken = await acquireAadToken();
    const apiUrl = `https://vssps.dev.azure.com/${orgName}/_apis/tokens/pats?api-version=7.1-preview.1`;
    
    const response = await fetch(apiUrl, {
        method: 'GET',
        headers: {
            'Authorization': `Bearer ${accessToken}`,
            'Content-Type': 'application/json'
        }
    });

    if (!response.ok) {
        const errorDetails = await response.text();
        throw new Error(`API请求失败: ${errorDetails}`);
    }

    return await response.json();
}

5. 常见问题排查

  • 不要使用委托权限流(如ROPC)或PAT调用PAT管理API,官方明确要求必须使用Azure AD应用权限令牌
  • 权限变更后可能需要等待数分钟生效,不要立即重试
  • 若Azure DevOps组织开启了IP限制,需将Azure Function的出站IP加入允许列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:17:39