分享方式:


使用個人存取權杖

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

個人存取令牌 (PAT) 可作為驗證 Azure DevOps 的替代密碼。 本文會引導您完成建立、利用、修改和撤銷 Azure DevOps PAT 的程式。

關於 PAT

個人存取令牌 (PAT) 可作為 Azure DevOps 的安全性認證。 此 PAT 不僅會識別您,也會決定存取範圍和存取範圍。 因此,PAT 和密碼一樣重要,而且應該謹慎處理。

如果您使用Microsoft工具,則Microsoft帳戶 (MSA) 或 Microsoft Entra 標識符是可辨識和支援的方法。 不過,如果您使用不支援Microsoft或Microsoft Entra 帳戶的第三方工具,或如果您不願意與這些工具共用主要認證,PAT 是更安全的替代方案。

使用下列兩種方式建立和管理 PAT:

若要建立非Microsoft工具的 PAT,您可以使用 Git 認證管理員 或手動產生它們。 建議您檢閱我們的 驗證指引 ,以協助您選擇適當的驗證機制。 PAT 是小型專案不需要廣泛解決方案的直接替代方案。 除非認證管理員正在使用中,否則使用者每次都必須輸入其認證。

建立 PAT

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

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

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

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

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

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

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

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

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

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

    注意

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

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

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

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

重要

  • 請謹慎處理 PAT,與您的密碼相同,並保留密碼。
  • 針對由 Microsoft Entra 識別碼所支援的組織,必須在 90 天內使用新的 PAT 登入;無法這麼做會轉譯 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 應用程式部署時,會建立名為“Service Hooks: : 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?

答:請確定您已登入已設定 PAT 範圍的組織。 您可以在登入相同Microsoft Entra 識別符的任何組織時,檢視所有 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 是否已過期。