Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
个人访问令牌(PAT)充当用于向 Azure DevOps 进行身份验证的替代密码。 此 PAT 可识别你并确定可访问性和访问范围。 将 PAT 与密码一样谨慎对待。
当您使用 Microsoft 工具时,Microsoft 帐户(MSA)或 Microsoft Entra ID 会被识别和支持。 如果使用的工具不支持 Microsoft Entra 帐户或不想共享主要凭据,则 PAT 可能是一种合适的替代方案。 但是,我们建议尽可能使用 Microsoft Entra 令牌,而不是 PAT。
重要
我们建议使用更安全的Microsoft Entra 令牌,而不是高风险的个人访问令牌。 详细了解我们 减少 PAT 使用率的努力。 查看我们的 身份验证指南 ,以根据需要选择正确的身份验证机制。
先决条件
类别 | 要求 |
---|---|
权限 | 访问和修改管理 PAT 的用户设置的权限。 - 转到 个人资料 并选择 用户设置>个人访问令牌。 如果在此处可以看到和管理 PAT,则具有必要的权限。 - 转到您的项目,并选择 项目设置中的>权限。 在列表中查找用户帐户,并检查分配给你的权限。 查找与管理令牌或用户设置相关的权限。 - 如果 组织已制定策略,管理员可能需要授予特定权限或将你添加到允许列表来创建和管理 PAT。 - PAT 与生成该令牌的用户帐户关联。 根据 PAT 执行的任务,你自己可能需要更多权限。 |
访问权限级别 | 至少具有基本访问权限。 |
任务 | 仅在必要时使用 PAT,并始终定期轮换它们。 请参阅有关 使用 PAT 时的最佳做法部分。 |
创建 PAT
(
https://dev.azure.com/{Your_Organization}
) 登录到组织。在主页中,打开用户设置
,然后选择“个人访问令牌”。
选择“+ 新建令牌”。
为令牌命名,选择要在其中使用令牌的组织,然后将令牌设置为在设置天数后自动过期。
选择 此令牌的范围 以授权特定 任务。
例如,若要为生成和发布代理创建令牌以向 Azure DevOps 进行身份验证,请将令牌的范围设置为代理池(读取和管理)。 若要读取审核日志事件并管理或删除流,请选择“ 读取审核日志”,然后选择“ 创建”。
注意
你的管理员可能会对你进行限制,使你不能创建全权限的 PAT,或者仅限于创建打包权限的 PAT。 如果需要访问其他范围,请联系管理员以访问允许列表。 某些范围(例如
vso.governance
,如果它们不适合广泛使用),则可能无法在 UI 中使用。完成后,复制令牌并将其存储在安全位置。 出于安全原因,它不会再次显示。
在 Azure DevOps 中进行身份验证所需的任何位置使用 PAT。
重要
- 请谨慎对待 PAT,使其与密码保持机密。 请勿共享 PAT。
- 对于由 Microsoft Entra ID 提供支持的组织,必须在 90 天内使用新 PAT 登录,否则该 ID 将变为非活动状态。 有关详细信息,请参阅 条件访问的用户登录频率。
通知
在 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 应用部署时,将创建名为“服务挂钩:Azure 应用程序服务:部署 Web 应用”的令牌。
- 当你或管理员将 Web 负载测试设置为管道的一部分时,将创建名为“WebAppLoadTestCDIntToken”的令牌。
- 设置 Microsoft Teams 集成消息扩展时,将创建一个名为“Microsoft Teams Integration”的令牌。
警告
使用 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 生命周期管理 API
当通过 UI 维护大量令牌是不可持续的时 ,PAT 生命周期管理 API 可能很有用。 以编程方式管理 PAT 轮换也提供了定期轮换 PAT 并缩短其默认生命周期的机会。 我们的 示例 Python 应用 可以通过您的 Microsoft Entra 租户和 Azure DevOps 组织进行配置。
有关这些 API 的一些注意事项:
- 需要Microsoft Entra 访问令牌 才能访问此 API,因为建议在生成新令牌时采用更强的身份验证形式。
- 只有使用“代表用户”流的用户或应用才能生成 PAT。 使用“代表应用程序”流或不发出 Microsoft Entra 访问令牌的身份验证流的应用程序,无效,无法用于此 API。 因此, 服务主体或托管标识 无法创建或管理 PAT。
- 以前,PAT 生命周期管理 API 仅支持该
user_impersonation
范围,但现在vso.tokens
可用且建议用于这些 APIS 的范围。 缩小以前依赖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!
- 将 PAT 存储在安全密钥管理解决方案中,例如 Azure KeyVault。
- 定期通过 UI 或 PAT 生命周期管理 API 轮换或重新生成 PAT。
- 当不再需要时撤销 PAT。
- 轮换 PAT 以使用新的 PAT 格式,以便通过第一方工具更好地检测和吊销泄露的机密。
对于管理员
- 租户管理员可以设置 策略以限制 全局 PAT 创建、完全范围的 PAT 创建和长期 PAT 持续时间。
- 如果 PAT 遭到入侵,租户管理员可以撤销其组织用户的 PAT。
- 组织管理员可以 限制在组织中创建 PAT。 如果仍需要 PAT,请将其创建限制为仅允许列表上的那些资源。
常见问题
问:为什么无法编辑或重新生成范围限定为单个组织的 PAT?
答:登录到 PAT 作用范围所在的组织。 通过在登录到同一 Microsoft Entra ID 中的任何组织时更改 访问范围 筛选器,您可以查看所有的个人访问令牌(PAT),但只能在登录到特定组织时编辑特定组织范围的令牌。
问:如果用户帐户被禁用,PAT 会发生什么情况?
答:从 Azure DevOps 中删除用户时,PAT 在 1 小时内失效。 如果组织已连接到 Microsoft Entra ID,则 PAT 也会在Microsoft Entra ID 中失效,因为它属于用户。 建议将 PAT 轮换到另一个用户或服务帐户,以使服务保持运行。
问:是否可以将 PAT 与所有 Azure DevOps REST API 配合使用?
答: 不是。 可以将 PAT 用于大多数 Azure DevOps REST API,但 组织和配置文件 和 PAT 管理生命周期 API 仅支持 Microsoft Entra 令牌。
问:如果我意外将 PAT 签入 GitHub 上的公共存储库,会发生什么情况?
答:Azure DevOps 扫描已签入 GitHub 上的公共存储库的 PAT。 当我们找到泄露的令牌时,我们立即向令牌所有者发送详细的电子邮件通知,并在 Azure DevOps 组织的 审核日志中记录事件。 我们鼓励受影响的用户通过撤销泄露的令牌并将其替换为新令牌来缓解此问题。
除非你禁用了 自动撤销泄露的个人访问令牌 策略,否则我们立即撤销泄露的 PAT。 有关详细信息,请参阅 自动撤销泄露的 PAT。
问:是否可以使用个人访问令牌作为 ApiKey,使用 dotnet/nuget.exe 命令行将 NuGet 包发布到 Azure Artifacts 源?
答: 不是。 Azure Artifacts 不支持将 PAT 作为 ApiKey 传递。 在使用本地开发环境时,建议安装 Azure Artifacts 凭据提供程序,以对 Azure Artifacts 进行身份验证。 有关详细信息,请参阅以下示例:dotnet 和 NuGet.exe。 如果要使用 Azure Pipelines 发布包,请使用 NuGet 身份验证任务对源进行身份验证。 请查看示例。
问:为什么我的 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。 额外的标头还必须包含“user:PAT”的 Base64 编码。
git -c http.extraheader='Authorization: Basic [base 64 encoding of "user:password"]' ls-remote http://tfsserver:8080/tfs/DefaultCollection/_git/projectName
问:如何创建与某个人无关的访问令牌?
答:所有 PAT 都与创建它的用户标识相关联。 应用程序无法创建 PAT。
在 Azure DevOps 中,可以使用由应用程序服务主体或托管标识生成的 Microsoft Entra 令牌来创建不关联特定人员的访问令牌。 在管道中,使用 服务连接。
问:如何通过 API 重新生成/轮换 PAT? 我在 UI 中看到了该选项,但在 API 中看不到类似的方法。
UI 中提供的“重新生成”功能实际上完成了一些操作,这些操作可以通过 API 来复现。
若要旋转 PAT,请执行以下步骤:
- 请查看通过发出GET请求获取的PAT元数据。
- 使用 POST 调用创建具有旧 PAT ID 的新 PAT,
- 使用 DELETE 调用撤销旧的 PAT。
问:尝试使用 Entra 应用调用 PAT 生命周期管理 API 时,会看到“需要管理员批准”弹出窗口。
租户的安全策略需要管理员同意,然后应用程序才能访问组织中的组织资源。 联系租户管理员。
问:是否可以使用服务主体创建或管理 PAT?
否,个人访问令牌属于用户标识。 Entra 服务主体或托管标识能够生成短期有效的 Entra 令牌,这些令牌可在大多数接受 PAT 的位置使用。 详细了解 如何减少 Azure DevOps 中的 PAT 使用率 ,并探索将 PAT 替换为 Entra 令牌。