Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
个人访问令牌(PAT)充当用于向 Azure DevOps 进行身份验证的替代密码。 此 PAT 可识别你并确定可访问性和访问范围。 将 PAT 与密码一样谨慎对待。
使用Microsoft工具时,会识别和支持Microsoft帐户或Microsoft Entra ID。 如果使用不支持Microsoft Entra 帐户的工具,或者不想共享主凭据,请考虑使用 PAT 作为替代身份验证方法。 建议尽可能使用 Microsoft Entra 令牌 而不是 PAT。
重要说明
我们建议使用更安全的Microsoft Entra 令牌,而不是高风险的个人访问令牌。 详细了解我们 减少 PAT 使用率的努力。 查看我们的 身份验证指南 ,以根据需要选择正确的身份验证机制。
先决条件
| 类别 | 要求 | 
|---|---|
| Permissions | 访问和修改管理 PAT 的用户设置的权限。 - 转到配置文件并选择“ 用户设置>个人访问令牌”。 如果在此处可以看到和管理 PAT,则具有必要的权限。 - 转到您的项目,并选择 项目设置中的>权限。 在列表中查找用户帐户,并检查分配给你的权限。 查找与管理令牌或用户设置相关的权限。 - 如果 组织已制定策略,管理员可能需要授予特定权限或将你添加到允许列表来创建和管理 PAT。 - PAT 与生成该令牌的用户帐户关联。 根据 PAT 执行的任务,你自己可能需要更多权限。 | 
| 访问级别 | 至少基本访问权限。 | 
| Tasks | 仅在必要时使用 PAT,并始终定期轮换它们。 请参阅 有关使用 PAT 的最佳做法部分。 | 
创建 PAT
- 登录组织 ( - https://dev.azure.com/{Your_Organization})。
- 在主页中,打开用户设置  ,然后选择“个人访问令牌”。 ,然后选择“个人访问令牌”。  
- 选择“+ 新建令牌”。   
- 为令牌命名,选择要在其中使用令牌的组织,然后将令牌设置为在设置天数后自动过期。   
- 为这个令牌选择范围,以便为特定任务授权。 - 例如,若要为生成和发布代理创建令牌以向 Azure DevOps 进行身份验证,请将令牌的范围设置为代理池(读取和管理)。 若要读取审核日志事件并管理或删除流,请选择读取审核日志,然后选择 创建。   - 管理员可能会限制你创建全范围的 PAT,或仅限于创建包装范围的 PAT。 如果需要访问更多范围,请联系管理员以访问允许列表。 例如, - vso.governance某些范围在用户界面(UI)中可能不可用(如果它们不适合广泛使用)。
- 完成后,复制令牌并将其存储在安全位置。 出于安全原因,不会再次显示它。   
可以在 Azure DevOps 中要求用户凭据的任何位置使用 PAT。 记得:
- 请谨慎对待 PAT,使其与密码相同,并保密。 不要共享 PATS。
- 对于由 Microsoft Entra ID 提供支持的组织,必须在 90 天内使用新 PAT 登录,否则它变为非活动状态。 有关详细信息,请参阅 用户登录频率以获取条件访问。
通知
在 PAT 的生命周期内,用户会收到两条通知:一个是创建 PAT 时,另一个是过期前七天。
创建 PAT 后,可能会收到类似于以下示例的通知。 此通知用于确认你的 PAT 已成功添加到组织中。
              
               
              
              
            
过期通知电子邮件在到期前三天发送。 如果你的管理员 删除了在组织中创建 PAT 的能力,则电子邮件表明你无法再重新生成 PAT。 联系 项目集合管理员 ,将其包含在允许列表中,以便在该组织中继续创建 PAT 权限。
有关详细信息,请参阅配置 SMTP 服务器并自定义警报和反馈请求的电子邮件。
意外通知
如果收到意外的 PAT 通知,则可能意味着管理员或工具为你创建了 PAT。 以下是一些示例:
- 通过 git.exe连接到 Azure DevOps Git 存储库时,会创建一个命名 git: https://dev.azure.com/{Your_Organization} on YourMachine的令牌。
- 当你或管理员设置 Azure 应用服务 Web 应用部署时,会创建一个命名 Service Hooks: Azure App Service: Deploy web app的令牌。
- 当你或管理员将 Web 负载测试设置为管道的一部分时,将创建一 WebAppLoadTestCDIntToken个名为的令牌。
- 设置 Microsoft Teams Integration Messaging 扩展时,将创建一 Microsoft Teams Integration个名为的令牌。
如果你认为情况很严重:
- 如果怀疑它存在错误,请撤销 PAT(并更改密码)。
- 如果你是 Microsoft Entra 用户,请与管理员联系,了解未知源或位置是否访问了您的组织。
- 在意外通过 PAT 签入到公共 GitHub 存储库上查看常见问题解答。
使用 PAT
你的 PAT 就像密码一样,充当你的数字标识。 可以使用 PAT 作为一次性请求或在本地创建应用程序的原型的快速方法。 在代码中使用 PAT 对 REST API 请求进行身份验证,并通过在请求的授权标头中包含 PAT 来自动执行工作流。
应用代码正常工作后,切换到 Microsoft Entra OAuth,获取应用的用户 或服务 主体或托管标识的令牌,以作为应用程序获取令牌。 不建议长期使用 PAT 运行应用或脚本。 可以在使用 PAT 的任何位置使用 Microsoft Entra 令牌。
请考虑 通过 Azure CLI 获取Microsoft Entra 令牌 以获取即席请求。
若要通过 HTTP 标头提供 PAT,必须先将其转换为 Base64 字符串。 然后,可以采用以下格式将其作为 HTTP 标头提供:
Authorization: Basic BASE64_USERNAME_PAT_STRING
修改 PAT
执行以下步骤,以便:
- 重新生成 PAT 以创建新令牌,使上一个令牌失效。
- 延长 PAT 以增加其有效期。
- 更改 PAT 的范围以更改其权限。
- 在主页中,打开用户设置  ,然后选择“个人访问令牌”。 ,然后选择“个人访问令牌”。
- 选择要修改的令牌,然后选择“ 编辑”。   
- 编辑令牌名称、令牌过期信息或与令牌关联的访问范围,然后选择保存。   
撤销 PAT
你可以随时出于以下原因和其他原因撤销 PAT:
- 安全漏洞:如果怀疑它遭到入侵、泄露或在日志或公共存储库中公开,请立即撤销 PAT。
- 不再需要:在项目、服务或集成完成或停止创建时撤销 PAT。
- 策略符合性:撤销 PAT 以强制实施安全策略、合规性要求或组织令牌轮换计划。
- 用户更改:当团队成员离开组织或更改角色且不再需要访问权限时,撤销 PAT。
- 范围缩减:需要限制其访问功能时,撤销并重新创建具有减少权限的 PAT。
- 定期维护:将撤销 PAT 作为常规安全措施和令牌生命周期管理的一部分。
若要撤销 PAT,请执行以下步骤:
- 在主页上,打开用户设置  并选择 “个人访问令牌”。 并选择 “个人访问令牌”。
- 在 “安全性”下,选择 “个人访问令牌”。 选择要为其撤消访问权限的令牌,然后选择撤销。   
- 在 “确认 ”对话框中,选择“ 撤销”。   
PAT 生命周期管理 API
通过 UI 维护大量令牌时 ,PAT 生命周期管理 API 可能很有用。 以编程方式管理 PAT 轮换也提供了定期轮换 PAT 并缩短其默认生命周期的机会。 可以使用 Microsoft Entra 租户和 Azure DevOps 组织配置 示例 Python 应用 。
有关这些 API 的一些注意事项:
- 访问此 API 需要Microsoft Entra 访问令牌。 在挖掘新令牌时,我们建议采用更强的身份验证形式。
- 只有使用“代表用户”流的用户或应用才能生成 PAT。 使用“代表应用程序”流或身份验证流未颁发Microsoft Entra 访问令牌的应用不适用于此 API。 因此, 服务主体或托管标识 无法创建或管理 PAT。
- 以前,PAT 生命周期管理 API 仅 user_impersonation支持范围,但现在vso.pats可用,建议使用这些 API 的范围。 缩小以前依靠user_impersonation调用这些 API 的所有应用程序的范围。
对格式所做的更改
截至 2024 年 7 月,我们更新了 PAT 字符串的格式,以改善泄露的 PAT 检测工具和合作伙伴产品/服务中的机密检测。 此新的 PAT 格式包括更多可识别位,以提高这些检测工具中的误报检测率,并更快地缓解检测到的泄漏。
- 新令牌现在长度 为 84 个字符,52 个字符是随机化数据,这可改善整体萎缩。 令牌现在对暴力攻击更具抵抗力。
- 我们的服务颁发的令牌包括位于 76-80 位置的固定 AZDO签名。
如果你使用的是在该日期之前颁发的 PAT,请重新生成 PAT。 如果与 PAT 集成并内置了 PAT 验证,请更新验证代码以适应新的令牌长度和现有令牌长度。
警告
这两种格式在可预见的将来仍然有效。 随着新格式的采用增加,我们可能会停用 52 个字符的旧版 PAT。
有关使用 PAT 的最佳做法
考虑替代项
- 通过 Azure CLI 获取Microsoft Entra 令牌以获取即席请求,而不是挖掘较长生存期的 PAT。
- 使用凭据管理器(如 Git 凭据管理器 或 Azure Artifacts Credential Manager )简化凭据管理,身份验证设置为 oauth或Microsoft Entra 令牌。
创建 PAT
- 不要将个人数据置于 PAT 名称中。 不要重命名 PAT 名称以包含部分或全部实际 PAT 令牌。
- 避免在所有组织中创建全局 PAT,除非有必要。
- 对每个流或用例使用不同的令牌。
- 仅选择每个 PAT 所需的最小范围。 授予特定任务所需的最低权限。 为不同的工作流创建具有有限范围的单独 PAT,而不是使用单个范围广泛的令牌。 如果 PAT 需要只读权限,则在必要之前不要提供写入权限。
- 保持 PAT 寿命短。 (每周是理想的,更短是更好的。
管理 PAT
- 不要共享 PAT!
- 将 PAT 存储在安全密钥管理解决方案中,例如 Azure Key Vault。
- 通过 UI 或使用 PAT 生命周期管理 API 定期轮换或重新生成 PAT。
- 不再需要 PAT 时撤销 PAT。
- 轮换 PAT 以使用 新的 PAT 格式 ,以便通过我们的第一方工具更好地检测和吊销泄露机密。
对于管理员
- 租户管理员可以设置 策略,以限制 全局 PAT 创建、全范围的 PAT 创建和长期 PAT 持续时间。
- 如果 PAT 遭到入侵,租户管理员可以撤销其组织用户的 PAT。
- 组织管理员可以 限制在组织中创建 PAT。 如果仍需要 PAT,请将其创建限制为仅允许列表上的 PAT。
常见问题解答
Q. 为什么无法编辑或重新生成范围限定为单个组织的 PAT?
答: 登录到范围你的 PAT 的组织。 当登录到同一Microsoft Entra ID 中的任何组织时,可以通过更改 访问范围 筛选器来查看 PAT。 登录到特定组织时,只能编辑组织范围的令牌。
Q. 如果用户帐户被禁用,PAT 会发生什么情况?
答: 从 Azure DevOps 中删除用户后,PAT 在一小时内失效。 如果组织已连接到 Microsoft Entra ID,则 PAT 也会在 Microsoft Entra ID 中失效,因为它属于用户。 建议将 PAT 轮换到另一个用户或服务帐户,使服务保持运行。
Q. 是否可以将 PAT 用于所有 Azure DevOps REST API?
答: 否。 可以将 PAT 用于大多数 Azure DevOps REST API,但 组织和配置文件 和 PAT 管理生命周期 API 仅支持 Microsoft Entra 令牌。
Q. 如果意外将 PAT 签入 GitHub 上的公共存储库,会发生什么情况?
答: Azure DevOps 扫描已签入到 GitHub 上的公共存储库的 PAT。 当我们找到泄露的令牌时,我们会立即向令牌所有者发送详细的电子邮件通知,并在 Azure DevOps 组织的审核日志中记录事件。 我们鼓励受影响的用户通过撤销泄露的令牌并将其替换为新令牌来缓解此问题。
除非你禁用了自动撤销泄露的个人访问令牌策略,否则我们会立即撤销泄露的 PAT。 有关详细信息,请参阅自动撤销泄露的 PAT。
Q. 是否可以使用个人访问令牌作为 API 密钥,使用 dotnet/nuget.exe 命令行将 NuGet 包发布到 Azure Artifacts 源?
答: 否。 Azure Artifacts 不支持将 PAT 作为 API 密钥传递。 使用本地开发环境时,建议安装 Azure Artifacts 凭据提供程序 以使用 Azure Artifacts 进行身份验证。 有关详细信息,请参阅以下示例: dotnet 和 NuGet.exe。 如果要使用 Azure Pipelines 发布包,请使用 NuGet 身份验证 任务通过源进行身份验证。 有关详细信息,请参阅 使用 Azure Pipelines 发布 NuGet 包(YAML/经典版)中的示例。
Q. 为什么我的 PAT 停止工作?
答: PAT 身份验证要求使用完整的身份验证流定期登录到 Azure DevOps。 对于许多用户来说,每 30 天登录一次就足够了,但你可能需要根据你的 Microsoft Entra 配置更频繁地登录。 如果 PAT 停止工作,请先尝试登录到组织并完成完整的身份验证提示。 如果 PAT 仍然不起作用,请检查它是否已过期。
在 Azure DevOps Server 上启用 IIS 基本身份验证会使使用 PAT 失效。 建议始终关闭 IIS 基本身份验证 。
警告
如果将 Git 与 IIS 基本身份验证配合使用,Git 会中断,因为它需要 PAT 进行用户身份验证。 可以向 Git 请求添加额外的标头,以将其用于 IIS 基本身份验证,但我们不建议执行此作。 额外的标头必须用于所有 Azure DevOps Server 安装,因为 Windows 身份验证也会阻止使用 PAT。 额外的标头还必须包含 Base 64 编码。user:PAT
git -c http.extraheader='Authorization: Basic [base 64 encoding of "user:password"]' ls-remote http://tfsserver:8080/tfs/DefaultCollection/_git/projectName
Q. 如何创建与某个人无关的访问令牌?
答: 所有 PAT 都与创建它的用户标识相关联。 应用程序无法创建 PAT。
在 Azure DevOps 中,可以生成未链接到特定用户的访问令牌。 使用应用程序 服务主体或托管标识 颁发的Microsoft Entra 令牌。 对于管道,请使用 服务连接 安全地对自动化任务进行身份验证和授权,而无需依赖用户特定的凭据。
Q. 如何通过 API 重新生成/轮换 PAT? 我在 UI 中看到了该选项,但在 API 中看不到类似的方法。
答: UI 中提供的 “重新生成 ”功能实际上完成了一些作,可以通过 API 进行复制。
若要旋转 PAT,请执行以下步骤:
- 请参阅 使用 GET 调用的 PAT 元数据。
- 使用 POST 调用创建具有旧 PAT ID 的新 PAT。
- 使用 DELETE 调用撤销旧的 PAT。
Q. Azure DevOps 令牌列表中显示过期、吊销或非活动 PA 的时长?
答: 不能再使用或重新生成已过期或吊销的 PAT。 这些非活动令牌在过期或吊销后的几个月内保持可见状态,然后自动从显示中删除。
Q. 尝试使用 Microsoft Entra 应用调用 PAT 生命周期管理 API 时,为何会看到“需要管理员批准”消息?
答: 租户的安全策略需要管理员同意,然后应用程序才能访问组织中的组织资源。 联系租户管理员。
Q. 是否可以使用服务主体创建或管理 PAT?
答: 否。 PAT 属于用户标识。 Microsoft Entra 服务主体或托管标识可以生成生存期较短的 Microsoft Entra 令牌,这些令牌可以在大多数接受 PAT 的位置使用。 详细了解 如何减少 Azure DevOps 中的 PAT 使用率 ,并探索将 PAT 替换为 Microsoft Entra 令牌。