如何通过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
相关产品推荐
相关产品推荐

