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

如何通过SPN从Python连接Azure DevOps并生成Bearer Token?

使用服务主体(SPN)生成Azure DevOps的Bearer Token替代PAT

要通过SPN生成可用于Azure DevOps的Bearer Token,核心是借助Azure AD认证流程,针对Azure DevOps专属资源ID获取访问令牌。以下是具体实现步骤:

1. 关键固定信息

Azure DevOps对应的Azure AD资源ID为固定值:499b84ac-1321-427f-aa17-267ca6975798,请求令牌时必须指定该资源。

2. 安装依赖库

微软官方推荐使用msal库处理Azure AD令牌获取,先安装依赖:

pip install msal

3. Python代码实现

直接用SPN的client_id、tenant_id和密钥生成Bearer Token:

import msal

# 替换为你的SPN凭据
CLIENT_ID = "你的spn client_id"
TENANT_ID = "你的tenant_id"
CLIENT_SECRET = "你的spn密钥"
AZURE_DEVOPS_RESOURCE_ID = "499b84ac-1321-427f-aa17-267ca6975798"

def get_azure_devops_bearer_token():
    # 初始化机密客户端(服务主体属于机密客户端范畴)
    app = msal.ConfidentialClientApplication(
        client_id=CLIENT_ID,
        client_credential=CLIENT_SECRET,
        authority=f"https://login.microsoftonline.com/{TENANT_ID}"
    )

    # 请求针对Azure DevOps的访问令牌
    result = app.acquire_token_for_client(scopes=[f"{AZURE_DEVOPS_RESOURCE_ID}/.default"])

    if "access_token" in result:
        return result["access_token"]
    else:
        raise Exception(f"获取令牌失败: {result.get('error_description', '未知错误')}")

# 调用函数获取Token
bearer_token = get_azure_devops_bearer_token()
print(f"Bearer Token: {bearer_token}")

4. 替换PAT的认证方式

拿到令牌后,修改Azure DevOps API的请求头:

  • 原PAT认证头:Authorization: Basic base64编码的":{PAT}"
  • 替换为:Authorization: Bearer {bearer_token}

5. 权限配置注意事项

SPN必须在Azure DevOps组织/项目中被授予对应权限:

  • 登录Azure DevOps,进入目标项目的「项目设置」→「权限」
  • 添加SPN的应用标识(即client_id对应的应用名称),分配合适角色(如「贡献者」),确保具备Wiki编辑等操作所需权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:12