使用个人访问令牌

Azure DevOps 服务 |Azure DevOps Server |Azure DevOps Server 2022

个人访问令牌(PAT)是用于Azure DevOps身份验证的替代密码。 PAT 可识别你并确定可用的资源和操作。 像对待密码一样谨慎保管 PAT。

注意

当提供更安全的身份验证方法时,请避免 PAT。 对于应用程序和自动化,请尽可能使用Microsoft Entra令牌、托管标识或服务主体。

如果某个工具不支持 Microsoft Entra 身份验证,请使用组织范围 PAT,并将其权限范围限制到最小,同时将有效期设置为在实际可行情况下尽可能短。

Important

Azure DevOps即将停用全球 PAT。 所有现有的全球 PAT 在 2026 年 12 月 1 日停止工作。 立即将它们迁移到组织范围 PAT,或改用 Microsoft Entra 身份验证。 有关详细信息,请参阅 Azure DevOps 中的全局个人访问令牌停用。

先决条件

  • 访问Azure DevOps组织或Azure DevOps Server集合。
  • PAT 访问资源和执行操作所需的权限。 PAT 不能授予超出其所有者所拥有权限的权限。
  • 根据贵组织策略创建 PAT 的权限。 管理员可以限制 PAT 创建、作用域和生存期。 有关详细信息,请参阅 使用策略管理 PAT。

创建 PAT

  1. 登录到你的组织 (https://dev.azure.com/{organization})。

  2. 在主页上,打开用户设置 并选择 “个人访问令牌”。

    选择了“个人访问令牌”的用户设置的屏幕截图。

  3. 选择“+ 新建令牌”。

    “个人访问令牌”页的屏幕截图,其中选择了“新建令牌”。

  4. 输入名称,选择一个组织,并设置到期日期。

    “创建”对话框的屏幕截图,其中配置了 PAT 名称、组织和过期时间。

  5. 仅选择预期任务所需的 范围 。

    例如,若要注册自托管代理,请选择代理池(读取和管理)。 管理员可能会限制具有完整作用域的 PAT,或者要求将特定作用域添加到允许列表中。

    范围选项的屏幕截图,其中选择了新 PAT 所需的范围。

  6. 选择“ 创建”,复制令牌并将其存储在安全位置。 令牌值不会再次显示。

    可供复制并用于安全存储的新 PAT 的屏幕截图。

注释

以下屏幕截图显示了Azure DevOps服务。 Azure DevOps Server接口可能略有不同。

  1. 登录到 Azure DevOps Server Web 门户(https://{server}/{collection} 或 http://{server}:{port}/tfs/{collection})。

  2. 在主页上,打开用户设置 并选择 “个人访问令牌”。

    选择了“个人访问令牌”的用户设置的屏幕截图。

  3. 选择“+ 新建令牌”。

    “个人访问令牌”页的屏幕截图,其中选择了“新建令牌”。

  4. 输入名称,选择集合,并设置到期日期。

    “创建”对话框的屏幕截图,其中配置了 PAT 名称、集合和过期。

  5. 仅选择预期任务所需的 范围 。

    例如,若要注册自托管代理,请选择代理池(读取和管理)。

    范围选项的屏幕截图,其中选择了新 PAT 所需的范围。

  6. 选择“ 创建”,复制令牌并将其存储在安全位置。 令牌值不会再次显示。

    可复制并安全存储的新 PAT 的屏幕截图。

对于由 Microsoft Entra ID 提供支持的组织,如果未在 90 天内使用新的 PAT 登录,它将失效。 有关详细信息,请参阅条件访问的用户登录频率。

通知

Azure DevOps在创建 PAT 时发送通知,并在它过期之前发送另一条通知。

确认已创建 PAT 的电子邮件截图。

如果组织策略不再允许重新生成 PAT,则过期电子邮件会标识该限制。 如果你需要允许列表项,请联系项目集合管理员。

有关电子邮件配置的信息,请参阅 “配置 SMTP 服务器”,并为警报和反馈请求自定义电子邮件。

意外通知

意外的通知可能意味着管理员或工具为你创建了 PAT。 常见令牌名称包括:

  • git: https://dev.azure.com/{organization} on {machine},在 Git 连接到Azure Repos存储库时创建。
  • Service Hooks: Azure 应用服务: Deploy web app,是在配置Azure 应用服务部署时创建的。
  • Microsoft Teams Integration,是在配置Microsoft Teams集成时创建的。

如果无法识别 PAT, 请撤销它 并更改密码。 对于Microsoft Entra帐户,请让管理员查看不熟悉的登录活动。

使用 PAT

对于一次性请求、本地原型或不支持 Microsoft Entra 身份验证的工具,请使用 PAT。 不要将 PAT 用作生产应用程序或服务的长期凭据。

Azure DevOps通过 HTTP 基本身份验证标头接受 PAT。 用户名可以为空。 Base64 编码字符串 :{PAT},并使用此标头中生成的值:

Authorization: Basic BASE64_ENCODED_PAT

以下示例要求 AZURE_DEVOPS_PAT 从安全机密源填充环境变量。

$patBytes = [Text.Encoding]::ASCII.GetBytes(":$env:AZURE_DEVOPS_PAT")
$headers = @{ Authorization = "Basic $([Convert]::ToBase64String($patBytes))" }

Invoke-RestMethod `
  -Uri "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.1" `
  -Headers $headers

原型工作后,将其迁移到 Microsoft Entra OAuth,以便进行委派用户访问或服务主体或托管标识以进行应用程序访问。

修改 PAT

可以更改 PAT 的名称、过期或范围。 重新生成 PAT 会创建新的令牌值并使以前的值失效。 无法修改或重新生成过期或撤销的 PAT;请改为创建一个新的。

  1. 在主页上,打开用户设置 并选择 “个人访问令牌”。

  2. 选择 PAT,然后选择 “编辑”。

    已选择“编辑”选项的现有 PAT 的屏幕截图。

  3. 更改令牌名称、过期或范围,然后选择“ 保存”。

    可供保存的已更新 PAT 设置的屏幕截图。

撤销 PAT

在遭到入侵、不再需要或具有超过所需访问权限时撤销 PAT。

  1. 在主页上,打开用户设置 并选择 “个人访问令牌”。

  2. 选择 PAT,然后选择“ 撤销”。

    已选择“撤销”的现有 PAT 的屏幕截图。

  3. 在确认对话框中,选择“ 撤销”。

    用于撤消 PAT 的确认对话框的屏幕截图。

替换已过期或被撤销的 PAT

PAT 过期或吊销后,Azure DevOps拒绝使用该身份验证的后续身份验证尝试。 管道、脚本、包客户端或 Git 操作通常在下次进行身份验证时失败。 Azure DevOps不能保证吊销会终止已建立的每个连接。

在 PAT 过期之前旋转 PAT

在不发生可避免的服务中断的情况下替换 PAT:

  1. 创建一个仅授予所需作用域且有效期较短的组织范围内的 PAT。

  2. 将新值存储到您的密钥存储中。 不要在 Git 远程 URL、 .git/config源代码、管道 YAML 或日志中嵌入 PAT。

  3. 在更新每个依赖项之前,先使用非生产操作或一个集成测试新的 PAT。

  4. 更新存储旧 PAT 的每个服务或工具:

    Integration 在何处更新凭据
    Git Git 凭据管理器或其他安全凭据管理器
    Azure Pipelines 机密变量、变量组或服务连接
    Azure Artifacts Azure Artifacts凭据提供程序或包管理器的安全配置
    脚本和 REST 客户端 机密存储或受保护的环境变量
    第三方工具 该工具的安全凭据存储区
  5. 测试每个已更新的集成项。 运行受影响的管道、Git 操作、包操作、脚本或 API 请求,并检查是否出现身份验证失败。

  6. 撤销旧的 PAT。

保留每个 PAT 的所有者、用途、范围、过期和依赖集成清单。 根据组织的策略和具体场景的风险,在 PAT 过期前进行更换。

在过期或被吊销后恢复

如果 PAT 意外停止工作:

  1. 在 “个人访问令牌 ”页上,检查 PAT 的状态和到期时间。
  2. 创建一个新的替代 PAT,仅包含受影响的集成所需的权限范围。
  3. 更新存储不可用 PAT 的集成。
  4. 测试每个集成,并监控其下一次计划运行是否出现身份验证失败。

如果失败的原因尚不清楚,请查看 PAT 审核事件 ,以确定 PAT 是否已过期、已更新还是被吊销。

使用生命周期管理 API 管理 PAT

使用 PAT 生命周期管理 API 以编程方式列出、创建、更新和撤销自己的 PAT。

这些 API 需要通过用户委托流获取的 Microsoft Entra 访问令牌。 使用 vso.pats 范围。 服务主体和托管标识无法创建或管理 PAT,因为它们不表示用户。

运算 请求
列出 PAT GET https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?api-version=7.1
创建 PAT POST https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?api-version=7.1
撤销 PAT DELETE https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?authorizationId={authorizationId}&api-version=7.1

将Microsoft Entra令牌作为持有者令牌发送。 创建请求采用以下请求正文格式:

{
  "displayName": "CI build access",
  "scope": "vso.build",
  "validTo": "{expiration-in-UTC}",
  "allOrgs": false
}

列表响应返回数组中的 patTokens 标记。 创建响应仅会在 patToken.token 中返回一次该密钥。 安全地存储该值,从不将其写入日志。 若要撤销旧令牌,请将其 authorizationId 值作为表中所示的查询参数传入。

有关完整的架构和示例,请参阅 “列出 PAT”、“ 创建 PAT”和 “撤销 PAT”。

查看 PAT 审计事件

Azure DevOps服务记录组织审核日志中的 PAT 生命周期事件。 在 组织设置中,选择“ 审核”,然后筛选以下操作:

Action Event
已创建 PAT Token.PatCreateEvent
PAT 过期 Token.PatExpiredEvent
在公共存储库中找到了 PAT Token.PatPublicDiscoveryEvent
用户撤销 PAT Token.PatRevokeEvent
Azure DevOps 吊销 PAT Token.PatSystemRevokeEvent
PAT 已被修改或重新生成 Token.PatUpdateEvent

当前未记录令牌访问事件。 使用审核日志调查生命周期变更,而不是确定 PAT 是否曾被使用以及何时被使用。

审计日志保留期

审核事件将保留 90 天,然后删除。 保留期无法自定义。 若要保留更长的事件,请将其导出到 CSV 或 JSON,或将审核流配置为外部安全信息和事件管理 (SIEM) 系统。

有关详细信息,请参阅 Access、导出和筛选审核日志以及Azure DevOps审核事件。

配置 PAT 策略

租户管理员可以限制全局 PAT 和全范围 PAT,设置 PAT 的最长有效期,并控制是否自动撤销已泄露的 PAT。 在组织设置>中配置租户级 PAT 策略Microsoft Entra。

组织所有者可以在 组织设置>策略中限制为单个组织的 PAT 创建。 有关角色、策略行为和允许列表过程,请参阅 使用策略管理 PAT。

PAT 格式

PAT 字符串使用可识别的格式来改进机密检测并减少误报。

  • PAT 长度为 84 个字符,包括 52 个随机字符。
  • Azure DevOps PAT 包含位置 76 到 80 处的固定AZDO签名。

如果您的集成需要验证 PAT,请支持 84 字符格式。 有关泄露令牌防护,请参阅 自动撤销已泄露的 PAT。

有关使用 PAT 的最佳做法

考虑替代项

创建 PAT

  • 仅创建组织级 PAT。 全球 PAT 于 2026 年 12 月 1 日停止工作。
  • 对每个工具或工作流使用不同的 PAT。
  • 仅选择任务所需的范围。
  • 保持生存期尽可能短。
  • 不要在其显示名称中包含个人数据或令牌值的任何部分。

管理 PAT

  • 不要共享 PAT。
  • 将 PAT 存储在安全机密存储中,例如Azure 密钥保管库。
  • 在 PAT 过期之前替换它们,并在不再需要它们时撤销它们。
  • 如果 PAT 已暴露或被盗用,请立即将其撤销。

管理员指南

  • 限制全作用域 PAT,并根据您的安全要求设置最大有效期。
  • 限制在不需要 PAT 的组织中创建 PAT。
  • 使用支持的 令牌管理 API 撤销用户 PAT。
  • 对于服务和自动化,首选 Microsoft Entra 身份验证。

审查并处理存在风险的 PAT

作为安全审查的一部分:

  1. 识别具有完整作用域、长生存期、全局访问或未记录所有者和用途的 PAT。
  2. 查看审核日志中的 PAT 创建、更新、公共发现、过期和吊销事件。 由于未记录令牌访问,因此不要使用审核日志将 PAT 分类为活动或过时。
  3. 撤销已暴露、已泄露或不再需要的 PAT。 若要卸载,请使用支持的 令牌管理 API 撤销用户的 PAT 并通知所有者受影响的集成。
  4. 配置租户和组织 PAT 策略,以限制全局性 PAT 和全范围 PAT、设置最长有效期,并控制已泄露 PAT 的自动撤销。
  5. 当保留要求超过 90 天时导出审核事件或配置审核流。

常见问题解答

为什么我无法编辑或重新生成作用范围仅限于一个组织的 PAT?

登录到范围为 PAT 的组织。 你可以通过更改访问范围筛选器,查看同一 Microsoft Entra 租户中任何组织的你的 PAT,但只能在该组织中编辑组织范围的 PAT。

禁用用户帐户时,PAT 会发生什么情况?

当帐户被禁用或从组织中删除时,其 PAT 将无法再访问该组织的资源。 Azure DevOps不会自动删除 PAT。 如果已还原访问权限,则尚未过期或已吊销的 PAT 适用于用户的当前权限。

是否可以将 PAT 用于所有Azure DevOps REST API?

否。 PAT 适用于大多数Azure DevOps REST API。 某些 API(包括组织、配置文件和 PAT 生命周期管理 API)需要Microsoft Entra令牌。

如果将 PAT 提交到公共GitHub存储库,会发生什么情况?

Azure DevOps 会扫描公开的 GitHub 存储库,以查找泄露的 PAT。 检测到令牌时,Azure DevOps通知所有者并记录审核事件。 除非租户策略禁用自动撤销,否则 Azure DevOps 会撤销已泄露的 PAT。 有关详细信息,请参阅自动撤销泄露的 PAT。

是否可以将 PAT 用作 API 密钥来发布 NuGet 包?

否。 Azure Artifacts不支持将 PAT 作为 API 密钥传递。 在本地开发环境中,安装Azure Artifacts凭据提供程序。 在Azure Pipelines中,使用 NuGet 身份验证任务。

有关示例,请参阅使用 dotnet 发布、使用 NuGet.exe发布,以及使用 Azure Pipelines 发布 NuGet 包。

为什么我的 PAT 停止工作?

检查 PAT 是否已过期、被吊销、变为非活动状态、范围不足或属于权限更改的用户。 对于由Microsoft Entra ID提供支持的组织,请登录Azure DevOps并完成完整的身份验证提示,然后重试。 条件访问配置可能需要更频繁的登录。

对于Azure DevOps Server,IIS 基本身份验证会阻止 PAT 身份验证。 使 IIS 基本身份验证保持禁用状态。

如何创建未绑定到用户的访问令牌?

PAT 始终与创建它们的用户相关联。 对于非用户标识,请使用颁发给应用程序服务主体或托管标识的Microsoft Entra令牌。 对于管道,请使用 服务连接。

如何通过 API 轮换 PAT?

生命周期管理 API 不会在一个操作中重新生成 PAT。 先列出旧 PAT 以获取其元数据,创建具有所需作用域和过期时间的新 PAT,更新并测试所有依赖于它的集成,然后使用其 authorizationId 吊销旧 PAT。 有关正确的路由,请参阅 使用生命周期管理 API 管理 PAT。

调用 PAT 生命周期管理 API 时,为什么会出现管理员批准消息?

租户的安全策略需要管理员同意,Microsoft Entra应用程序才能访问组织资源。 请与租户管理员联系。