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

如何获取特定用户的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流程:

  1. 注册Azure DevOps应用后,引导用户授权时,添加vso.tokens权限范围
  2. 用用户授权后的访问令牌,调用你之前的PAT生成API:
    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,都属于敏感凭据,必须加密存储,且设置合理的过期时间
  • 不要尝试绕过用户授权获取PAT,这违反Azure DevOps的安全规范和用户隐私要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:25:59