如何获取特定用户的PAT以实现代用户投票功能?
问题分析与解决方案
首先明确:无法直接以服务账号身份获取其他用户的PAT。PAT是用户的个人身份凭据,必须由用户主动授权后,才能以用户身份生成或获取。你之前用Connect-AzAccount -UseDeviceAuthentication生成的Bearer令牌属于服务账号,因此调用PAT生成API时,自然会创建服务账号的PAT。
正确实现用户代投票的两种方案
方案一:通过OAuth 2.0授权码流程获取用户访问令牌(推荐,无需存储PAT)
不需要生成用户PAT,直接使用用户的访问令牌调用Azure DevOps投票API,这是更安全的方式:
- 在Azure DevOps组织中注册一个应用,获取客户端ID和重定向URI
- 引导目标用户访问授权URL,请求所需权限范围(比如
vso.code_review用于代码评审投票,按需添加其他必要权限) - 用户登录并授权后,你的应用会收到授权码,用该码兑换用户的访问令牌(Bearer令牌)
- 使用这个用户的Bearer令牌直接调用Azure DevOps的投票API,即可实现以用户身份投票
方案二:生成用户专属PAT(需用户授权)
如果必须使用PAT,同样需要通过用户授权的OAuth流程:
- 注册Azure DevOps应用后,引导用户授权时,添加
vso.tokens权限范围 - 用用户授权后的访问令牌,调用你之前的PAT生成API:
此时生成的PAT将属于授权的用户,而非服务账号。curl --request POST --url 'https://vssps.dev.azure.com/{ORGANIZATION}/_apis/tokens/pats?api-version=7.1-preview.1' --header 'Authorization: Bearer {USER_ACCESS_TOKEN}' --data '{ "displayName": "User-Specific Token", "scope": "vso.code_review", # 仅授予投票所需的最小权限 "validTo": "2024-12-01T23:46:23.319Z", "allOrgs": false }'
关键注意事项
- 始终遵循最小权限原则,只请求实现功能必需的权限范围,避免过度授权
- 无论是访问令牌还是PAT,都属于敏感凭据,必须加密存储,且设置合理的过期时间
- 不要尝试绕过用户授权获取PAT,这违反Azure DevOps的安全规范和用户隐私要求
内容的提问来源于stack exchange,提问作者Jorge Anzola
相关产品推荐
相关产品推荐

