使用個人存取權杖

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

您可以使用個人存取令牌 (PAT) 作為替代密碼,向 Azure DevOps 進行驗證。 在本文中,我們會示範如何建立、使用、修改和撤銷 Azure DevOps 的 PAT。

下列影片示範如何建立和使用 PAT。

關於 PAT

個人存取權杖包含 Azure DevOps 的安全性認證。 PAT 可識別您、您可存取的組織,以及存取範圍。 其與密碼一樣重要,因此應該以相同的方式看待。

如果您是在 Microsoft 工具內工作,則您的 Microsoft 帳戶 (MSA) 或 Microsoft Entra ID 是可接受的良好支援方法。 但是,如果您使用不支援 Microsoft 或 Microsoft Entra 帳戶的協力廠商工具,或不想將主要認證提供給工具,請使用 PAT 來限制您的風險。

您可以透過下列其中一種方式來建立和管理 PAT:

若要為非 Microsoft 工具設定 PAT,請使用 Git 認證管理員 或手動建立它們。 建議您檢閱我們的 驗證指引 ,以協助您選擇正確的驗證機制。 對於較不需要健全解決方案的較小專案,PAT 是簡單的替代方案。 除非您的使用者使用認證管理員,否則他們必須每次輸入其認證。

建立 PAT

  1. 登入您的組織 (https://dev.azure.com/{yourorganization})。

  2. 從您的首頁開啟使用者設定 ,然後選取 [個人存取權杖]。

    顯示選取項目個人存取令牌的螢幕快照。

  3. 選取 [+ 新增權杖]。

    顯示選取專案 [新增令牌] 的螢幕快照。

  4. 為您的令牌命名、選取您想要使用令牌的組織,然後將令牌設定為在設定天數之後自動到期。

    顯示基本令牌資訊項目的螢幕快照。

  5. 選取此令牌的範圍,以授權您的特定工作

    例如,若要建立令牌,讓組建和發行代理程式向 Azure DevOps Services 進行驗證,請將令牌的範圍限制為代理程式集區(讀取及管理)。 若要讀取稽核記錄事件,以及管理和刪除數據流,請選取 [讀取稽核記錄],然後選取 [ 建立]。

    顯示 PAT 選取範圍的螢幕快照。

    注意

    您可能會在建立完整範圍的 PAT 上受到限制。 如果是,表示您 Microsoft Entra ID 中的 Azure DevOps 管理員已啟用原則,將您限制在一組特定的自訂定義範圍。 如需詳細資訊,請參閱 使用原則管理 PAT/限制建立完整範圍的 PAT。 針對自定義定義的 PAT,存取元件控管 API vso.governance所需的範圍無法在 UI 中選取。

  6. 完成時,請複製權杖,並將其儲存在安全的位置。 針對您的安全性,它不會再次顯示。

    顯示如何將令牌複製到剪貼簿的螢幕快照。

警告

請像密碼一般對待並使用 PAT,並將它保留為祕密。

在 Azure DevOps 中驗證所需的任何位置使用 PAT。

重要

針對受 Microsoft Entra ID 支援的組織,您有 90 天的時間可以使用新的 PAT 登入,否則會被視為非使用中。 如需詳細資訊,請參閱 條件式存取的使用者登入頻率。

通知

使用者在 PAT 存留期間收到兩個通知-一個在建立時,另一個是在到期前七天收到。

建立 PAT 之後,您會收到類似下列範例的通知。 此通知會確認您的 PAT 已新增至您的組織。

顯示 PAT 建立通知的螢幕快照。

下圖顯示 PAT 到期前七天的通知範例。

顯示 PAT 即將到期通知的螢幕快照。

如需詳細資訊,請參閱 設定 SMTP 伺服器並自定義警示和意見反應要求的電子郵件。

未預期的通知

如果您收到非預期的 PAT 通知,系統管理員或工具可能會代表您建立 PAT。 請參閱下列範例。

  • 當您透過 git.exe 連線到 Azure DevOps Git 存放庫時。 它會建立具有顯示名稱的令牌,例如 「git: https://MyOrganization.visualstudio.com/ on MyMachine」。。
  • 當您或系統管理員設定 Azure App 服務 Web 應用程式部署時,它會建立具有顯示名稱的令牌,例如「服務攔截::Azure App 服務::部署 Web 應用程式」。
  • 當您或系統管理員將 Web 負載測試設定為管線的一部分時,它會建立具有 “WebAppLoadTestCDIntToken” 等顯示名稱的令牌。
  • 設定 Microsoft Teams 整合傳訊擴充功能時,它會建立具有顯示名稱的令牌,例如 「Microsoft Teams 整合」。

警告

如果您認為 PAT 存在錯誤,建議您 撤銷 PAT。 然後,變更您的密碼。 身為 Microsoft Entra 使用者,請洽詢您的系統管理員,以查看您的組織是否使用來自未知來源或位置。 另請參閱有關不小心簽入 PAT 到公用 GitHub 存放庫的常見問題

使用 PAT

PAT 是您身分識別,當您使用它時代表您,就像密碼一樣。

Git

Git 互動需要用戶名稱,這可以是空字串以外的任何專案。 若要搭配 HTTP 基本身份驗證使用 PAT,請使用 Base64-encode$MyPat其包含在下列程式代碼區塊中。

在 PowerShell 中,輸入下列程式代碼。

$MyPat = 'yourPat'
$headerValue = "Authorization: Basic " + [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":" + $MyPat))
$env:GIT_AUTH_HEADER = $headerValue

git --config-env=http.extraheader=GIT_AUTH_HEADER 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 的詳細資訊和範例,請參閱下列文章:

修改 PAT

您可以重新產生或擴充 PAT,並修改其 範圍。 重新產生之後,先前的 PAT 已不再獲得授權。

  1. 從首頁開啟您的使用者設定,然後選取 [配置檔]。

    顯示要選取以修改 PAT 之按鈕順序的螢幕快照。

  2. 在 [安全性] 底下,選取 [ 個人存取令牌]。 選取您要修改的令牌,然後 選取 [編輯]。

    顯示醒目提示 [編輯] 按鈕以修改 PAT 的螢幕快照。

  3. 編輯令牌名稱、令牌到期或與令牌相關聯的存取範圍,然後選取 [ 儲存]。

    顯示已修改 PAT 的螢幕快照。

撤銷 PAT

您可以隨時撤銷 PAT,原因有各種。

  1. 從首頁開啟您的使用者設定,然後選取 [配置檔]。

    此螢幕快照顯示要選取的按鈕順序、Team Services、預覽頁面,以及撤銷 PAT。

  2. 在 [安全性] 底下,選取 [ 個人存取令牌]。 選取您要撤銷存取權的令牌,然後選取 [ 撤銷]。

    顯示選取專案撤銷單一令牌或所有令牌的螢幕快照。

  3. 在確認對話框中選取 [ 撤銷 ]。

    顯示撤銷 PAT 之確認畫面的螢幕快照。

常見問題集

問:如果停用用戶帳戶,PAT 會發生什麼事?

答:一旦使用者從 Azure DevOps 移除,PAT 就會在 1 小時內失效。 如果您的組織已連線到 Microsoft Entra 識別碼,則 PAT 也會在 Microsoft Entra ID 中失效,因為它屬於使用者。 我們建議使用者將其 PAT 輪替為另一個使用者或服務帳戶,讓服務持續執行。

問:是否有辦法透過 REST API 更新 PAT?

答:是,有一種方式可以使用我們的 PAT 生命週期管理 API 來更新、管理及建立 PAT。 如需詳細資訊,請參閱 使用 REST API 管理 PAT 和我們的 常見問題

問:我可以搭配所有 Azure DevOps REST API 使用基本身份驗證嗎?

A: 不可以。 您可以搭配大部分的 Azure DevOps REST API 使用基本身份驗證,但 組織和配置檔 僅支援 OAuth。 如需詳細資訊,請參閱 使用 REST API 管理 PAT。

問:如果我不小心將 PAT 簽入 GitHub 上的公用存放庫,會發生什麼事?

答:Azure DevOps 會掃描簽入 GitHub 上的公用存放庫的 PAT。 當我們找到流失的令牌時,我們會立即將詳細的電子郵件通知傳送給令牌擁有者,並將事件記錄至 Azure DevOps 組織的 稽核記錄。 除非您停用自動 撤銷洩露的個人存取令牌原則 ,否則我們會立即撤銷洩露的 PAT。 我們鼓勵受影響的用戶藉由 撤銷洩露的令牌,並將它取代為新的令牌 ,以立即緩解問題。

如需詳細資訊,請參閱 自動撤銷外洩的 PAT。

問:是否可以使用個人存取令牌作為 ApiKey,使用 dotnet/nuget.exe 命令行將 NuGet 套件發佈至 Azure Artifacts 摘要?

A: 不可以。 Azure Artifacts 不支援傳遞個人存取權杖做為 ApiKey。 使用本機開發環境時,建議您安裝 Azure Artifacts Credential Provider,以向 Azure Artifacts 進行驗證。 如需詳細資訊,請參閱下列範例:dotnetNuGet.exe。 如果您想要使用 Azure Pipelines 發佈套件,請使用 NuGet 驗證 工作來向摘要 範例進行驗證。

問:為什麼我的 PAT 停止運作?

答:PAT 驗證會要求您定期使用完整驗證流程登入 Azure DevOps。 每 30 天一次就足以供許多人使用,但視您的 Microsoft Entra 設定而定,您可能需要更頻繁地登入。 如果您的 PAT 停止運作,請先嘗試登入您的組織,以確保您完成完整的驗證提示。 如果您的 PAT 在那之後仍然無法運作,請檢查您的 PAT 是否已過期。