使用个人访问令牌

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018

可以使用个人访问令牌 (PAT) 作为备用密码,在 Azure DevOps 中进行身份验证。 本文介绍如何为 Azure DevOps 创建、使用、修改和撤销 PAC。

关于 PAT

个人访问令牌包含 Azure DevOps 的安全凭据。 PAT 可标识你、你可访问的组织和访问范围。 因此,它们和密码一样重要,应该以同样的方式对待。

如果使用 Microsoft 工具,则 Microsoft 帐户 (MSA) 或 Azure Active Directory (Azure AD) 是可接受且得到良好支持的方法。 但是,如果使用的是不支持 Microsoft 或 Azure AD 帐户的第三方工具,或者不想向该工具提供主凭据,请使用 PAT 来限制风险。

可以通过以下方法之一创建和管理 PAT:

若要为非 Microsoft 工具设置 PAC,请使用 Git 凭据管理器 或手动创建它们。 建议查看 我们的身份验证指南 ,以帮助你选择正确的身份验证机制。 对于需要不那么强大的解决方案的小型项目,PAT 是一个简单的替代方法。 除非用户使用凭据管理器,否则他们必须每次都输入其凭据。

创建 PAT

注意

从 Web 门户看到的映像可能与本文中看到的图像不同。 这些差异源于对 Azure DevOps 的更新或已启用的预览功能。 我们启用了 “新建帐户管理员”页面 功能。 除非明确提及,否则可用的基本功能保持不变。

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

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

    显示选择“个人访问令牌”的屏幕截图。

  3. 选择“+ New Token”。

    显示选择“新建令牌”的屏幕截图。

  4. 为令牌命名,选择要在其中使用该令牌的组织,然后将令牌设置为在设定的天数后自动过期。

    显示基本令牌信息的输入的屏幕截图。

  5. 选择此令牌 的范围 ,以便为 特定任务授权。

    例如,若要创建令牌以使生成和发布代理能够向Azure DevOps Services进行身份验证,请将令牌的范围限制为代理池, (读取&管理) 。 若要读取审核日志事件以及管理和删除流,请选择“ 读取审核日志”,然后选择“ 创建”。

    显示 PAT 的选定范围的屏幕截图。

    注意

    你可能会受到限制,无法创建全范围的 PAT。 如果是这样,则表明 Azure AD 中的 Azure DevOps 管理员已启用一项策略,仅限你访问特定的自定义范围集。 有关详细信息,请参阅 使用策略管理 PAC/限制全范围 PAC 的创建。 对于自定义的 PAT,访问组件治理 API vso.governance所需的范围在 UI 中不可选择。

  6. 完成后,复制令牌并将其存储在安全位置。 出于安全原因,它不会再次显示。

    显示如何将令牌复制到剪贴板的屏幕截图。

警告

像对待密码一样对待和使用 PAT,并将其保密。

  1. (https://{server}:8080/tfs/) 登录到 Web 门户。

  2. 在主页中,打开个人资料。 转到安全详细信息。

    显示主页、打开个人资料和“安全”按钮的屏幕截图。

  3. 创建个人访问令牌。

    显示添加个人访问令牌的屏幕截图。

  4. 为令牌命名。 选择令牌的生存期。

    如果有多个组织,还可以选择要在其中使用该令牌的组织。

    显示信息输入的屏幕截图,包括令牌名称和生存期。

  5. 选择此令牌 的范围 ,以便为 特定任务授权。

    例如,若要创建令牌以允许 生成和发布代理 进行身份验证,请将令牌的范围限制为 代理池, (读取、管理)

  6. 完成后,请确保 复制令牌。 出于安全原因,它不会再次显示。 使用此令牌作为密码。 选择“关闭”。

    显示已创建令牌的屏幕截图。

在 Azure DevOps 中,在需要用户凭据的任何位置使用 PAT 进行身份验证。

重要

对于由 Azure Active Directory 提供支持的组织,你有 90 天的时间使用新的 PAT 登录,否则会被视为非活动状态。 有关详细信息,请参阅 条件访问的用户登录频率

通知

用户在 PAT 的生存期内会收到两个通知 - 一个在创建时收到,另一个在过期前七天。

创建 PAT 后,会收到类似于以下示例的通知。 此通知确认已将 PAT 添加到组织。

显示 PAT 创建的通知的屏幕截图。

下图显示了 PAT 过期前的 7 天通知示例。

显示 PAT 即将过期通知的屏幕截图。

意外通知

如果收到意外的 PAT 通知,则表示管理员或工具可能已代表你创建了 PAT。 请参阅以下示例。

  • 通过 git.exe 连接到 Azure DevOps Git 存储库时。 它创建一个令牌,其显示名称类似于“git: https://MyOrganization.visualstudio.com/ on MyMachine”。
  • 当你或管理员设置Azure 应用服务 Web 应用部署时,它将创建一个显示名称为“Service Hooks: : Azure 应用服务: :Deploy Web app”的令牌。
  • 当你或管理员将 Web 负载测试设置为管道的一部分时,它会创建一个带有显示名称(如“WebAppLoadTestCDIntToken”)的令牌。
  • 设置 Microsoft Teams 集成消息传递扩展时,它会创建一个具有显示名称(如“Microsoft Teams 集成”)的令牌。

警告

如果你认为 PAT 存在错误,建议 撤销 PAT。 然后,更改密码。 作为 Azure AD 用户,请与管理员检查,以查看你的组织是否是从未知来源或位置使用的。 另请参阅有关 意外签入 PAT 到公共 GitHub 存储库的常见问题解答。

使用 PAT

PAT 是你的身份,在使用它时代表你,就像密码一样。

Git

Git 交互需要用户名,该用户名可以是除空字符串以外的任何内容。 若要将 PAT 与 HTTP 基本身份验证配合使用,请使用 Base64-encode$MyPat,它包含在以下代码块中。

在 PowerShell 中,输入以下代码。

$MyPat = 'yourPAT'

$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("`:$MyPat"))

git -c http.extraHeader="Authorization: Basic $B64Pat" clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName


若要使令牌更安全,请使用凭据管理器,这样就不必每次都输入凭据。 建议使用 Git 凭据管理器。 Git for Windows 是必需的。

现有存储库

对于现有存储库,如果已使用用户名添加了源,请先运行以下命令。

git remote remove origin

否则,请运行以下命令。

git remote add origin https://<PAT>@<company_machineName>.visualstudio.com:/<path-to-git-repo> path to git repo = <project name>/_git/<repo_name> git push -u origin --all

在代码中使用 PAT

可以在代码中使用 PAT。

如果要通过 HTTP 标头提供 PAT,请先将其转换为 Base64 字符串。 以下示例演示如何使用 C# 转换为 Base64。


Authorization: Basic BASE64_USERNAME_PAT_STRING

然后,生成的字符串可以采用以下格式作为 HTTP 标头提供。

以下示例使用 C# 中的 HttpClient 类

public static async void GetBuilds()
{
    try
    {
        var personalaccesstoken = "PATFROMWEB";

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                Convert.ToBase64String(
                    System.Text.ASCIIEncoding.ASCII.GetBytes(
                        string.Format("{0}:{1}", "", personalaccesstoken))));

            using (HttpResponseMessage response = client.GetAsync(
                        "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
            {
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseBody);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

提示

使用变量时,请在字符串的开头添加 $ ,如以下示例所示。

public static async void GetBuilds()
{
   try
  {
      var personalaccesstoken = "PATFROMWEB";

      using (HttpClient client = new HttpClient())
       {
           client.DefaultRequestHeaders.Accept.Add(
              new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

           client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
               Convert.ToBase64String(
                   System.Text.ASCIIEncoding.ASCII.GetBytes(
                       string.Format("{0}:{1}", "", personalaccesstoken))));

          using (HttpResponseMessage response = client.GetAsync(
                       $"https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
           {
               response.EnsureSuccessStatusCode();
               string responseBody = await response.Content.ReadAsStringAsync();
               Console.WriteLine(responseBody);
           }
       }
   }
   catch (Exception ex)
   {
       Console.WriteLine(ex.ToString());
   }
}

代码正常运行时,最好从基本身份验证切换到 OAuth

有关如何使用 PAT 的详细信息和示例,请参阅以下文章:

如果为 TFS 启用 IIS 基本身份验证,则 PAC 无效。 有关详细信息,请参阅 将 IIS 基本身份验证与本地 TFS 配合使用

修改 PAT

可以重新生成或扩展 PAT,并修改其 范围。 重新生成后,以前的 PAT 不再获得授权。

  1. 在主页中,打开用户设置,然后选择“ 配置文件”。

    显示要选择以修改 PAT 的按钮序列的屏幕截图。

  2. 在“安全性”下,选择“ 个人访问令牌”。 选择要修改的令牌,然后选择 “编辑”。

    显示突出显示用于修改 PAT 的“编辑”按钮的屏幕截图。

  3. 编辑令牌名称、应用组织、令牌过期或与令牌关联的访问范围,然后选择“ 保存”。

    显示保存的 PAT 的屏幕截图。

撤销 PAT

你可以出于各种原因随时撤销 PAT。

  1. 在主页中,打开用户设置,然后选择“ 配置文件”。

    显示要选择的按钮序列、Team Services、预览页和撤销 PAT 的屏幕截图。

  2. 在“安全性”下,选择“ 个人访问令牌”。 选择要撤销其访问权限的令牌,然后选择“ 撤销”。

    显示选择撤销单个令牌或所有令牌的屏幕截图。

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

    显示撤销 PAT 的确认屏幕的屏幕截图。

常见问题

问:如果禁用用户帐户,PAT 会发生什么情况?

答:从 Azure DevOps 中删除用户后,PAT 在 1 小时内失效。 如果组织已连接到 Azure Active Directory (Azure AD) ,则 PAT 在 Azure AD 中也会失效,因为它属于用户。 我们建议用户将其 PAT 轮换到另一个用户或服务帐户,以保持服务运行。

问:是否有办法通过 REST API 续订 PAT?

答:是的,有一种方法可以使用 PAT 生命周期管理 API 续订、管理和创建 PAT。 有关详细信息,请参阅 使用 REST API 管理 PAC常见问题解答

问:是否可以对所有 Azure DevOps REST API 使用基本身份验证?

答:否。 可以对大多数 Azure DevOps REST API 使用基本身份验证,但 组织和配置文件 仅支持 OAuth。 有关详细信息,请参阅 使用 REST API 管理 PAT

问:如果我不小心将 PAT 检查到 GitHub 上的公共存储库,会发生什么情况?

答:Azure DevOps 会扫描签入 GitHub 上公共存储库的 PAT。 发现令牌泄露后,我们会立即向令牌所有者发送详细的电子邮件通知,并将事件记录到 Azure DevOps 组织的 审核日志。 除非禁用了 自动撤销泄露的个人访问令牌 策略,否则我们会立即撤销泄露的 PAT。 我们鼓励受影响的用户立即通过 撤销泄露的令牌 并将其替换为新令牌来缓解问题。

有关详细信息,请参阅 自动撤销泄漏的 PAC

问:是否可以使用个人访问令牌作为 ApiKey,通过 dotnet/nuget.exe 命令行将 NuGet 包发布到 Azure Artifacts 源?

答:否。 Azure Artifacts 不支持将个人访问令牌作为 ApiKey 传递。 使用本地开发环境时,建议安装 Azure Artifacts 凭据提供程序 ,以便对 Azure Artifacts 进行身份验证。 有关详细信息,请参阅以下示例: dotnetNuGet.exe。 如果要使用 Azure Pipelines 发布包,请使用 NuGet 身份验证 任务通过源 示例进行身份验证。

问:为什么我的 PAT 停止工作?

答:PAT 身份验证要求使用完整身份验证流定期登录到 Azure DevOps。 对于许多人来说,每 30 天一次就足够了,但根据 Azure Active Directory 配置,可能需要更频繁地登录。 如果 PAT 停止工作,请先尝试登录到组织,确保通过完整的身份验证提示。 如果之后 PAT 仍不起作用,检查查看 PAT 是否已过期。