共用方式為


使用個人存取權杖

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

個人存取令牌 (PAT) 可作為驗證 Azure DevOps 的替代密碼。 此 PAT 會識別您,並判斷存取範圍和範圍。 因此,將 PAT 視為密碼的相同層級。

當您使用Microsoft工具時,Microsoft帳戶 (MSA) 或 Microsoft Entra 識別符是可辨識和支援的方法。 如果您使用不支援Microsoft或Microsoft Entra 帳戶的非Microsoft工具,或不想與這些工具共用主要認證,PAT 是適當的替代方案。

本文會引導您建立、使用、修改和撤銷 Azure DevOps 的 PAT。

您可以使用下列方法來管理 PAT:

若要建立非Microsoft工具的 PAT,您可以使用 Git 認證管理員 或手動產生它們。 建議您檢閱驗證 指引 ,以選擇適當的驗證機制。 PAT 為不需要大量解決方案的小型專案提供簡單的替代方案。 若沒有認證管理員,使用者每次都會輸入其認證。

必要條件

  • 權限:
    • 有權存取和修改管理 PAT 的用戶設定。
      • 檢查許可權: 若要檢查您的許可權,請在 Azure DevOps 中執行下列其中一個程式:
        • 移至您的配置檔,然後選取 [用戶設定>個人存取令牌]。 如果您可以在這裡看到及管理您的 PAT,您具有必要的許可權。
        • 移至您的項目,然後選取 [項目設定>許可權]。 在清單中尋找您的用戶帳戶,並檢查指派給您的許可權。 尋找與管理令牌或用戶設定相關的許可權。
    • 如果您的組織有原則,Azure DevOps 系統管理員可能需要授與您特定許可權,或將您新增至允許清單以建立和管理 PAT。
    • 視您想要使用 PAT 執行的工作而定,您可能需要額外的許可權。 例如:
      • 組建:讀取和執行
      • 程式代碼:讀取、寫入及管理
      • 環境:讀取與管理
      • 專案和小組:讀取、寫入及管理
      • 變數群組:讀取和建立
  • 存取層級: 至少具有基本存取權。
  • 安全性最佳作法: 熟悉 管理 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://dev.azure.com/{Your_Organization} on YourMachine」 的令牌。
  • 當您或系統管理員設定 Azure App 服務 Web 應用程式部署時,就會建立名為 “Service Hooks: : Azure App 服務: : Deploy Web app” 的令牌。
  • 當您或系統管理員將 Web 負載測試設定為管線的一部分時,就會建立名為 “WebAppLoadTestCDIntToken” 的令牌。
  • 設定Microsoft Teams整合延伸模組時,會建立名為“Microsoft Teams 整合”的令牌。

警告

  • 如果您懷疑 PAT 存在錯誤,請撤銷 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 remote remove origin

  • 使用 PAT 進行驗證: 如果您遇到標準驗證的問題,請執行下列命令以透過命令行進行驗證:

    git remote add origin https://dev.azure.com/<PAT>@<company_machineName>:/<project-name>/_git/<repo_name>

    git push -u origin --all

    path to git repo = /_git/do指的是 Git 存放庫的 Azure DevOps 中使用的 URL 路徑結構。 區 /_git/ 段表示您正在存取 Git 存放庫,而且您應該以存放庫的實際名稱取代 do 。 例如,如果您的存放庫名為 my-repo,則路徑會是 『/_git/my-repo』 。

  • 複製存放庫: 如果您使用 Git 且需要驗證,請執行下列命令:

    git clone https://{organization}@dev.azure.com/{organization}/_git/{repository}

    {organization}取代為您的 Azure DevOps 組織名稱,並以{repository}您的存放函式庫名稱取代 。

在您的程式代碼中使用 PAT

您可以在程式代碼中使用 PAT 來驗證 API 要求,並將工作流程自動化。 若要這樣做,請在 HTTP 要求的授權標頭中包含 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 以增加其有效期間。
  • 變更 PAT 的範圍以變更其許可權。
  1. 從首頁開啟您的使用者設定,然後選取 [配置檔]。

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

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

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

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

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

撤銷 PAT

您可以隨時撤銷 PAT,原因如下:

  • 如果您懷疑它遭到入侵,請撤銷 PAT。
  • 不再需要 PAT 時撤銷。
  • 撤銷 PAT 以強制執行安全策略或合規性需求。
  1. 從首頁開啟您的使用者設定,然後選取 [配置檔]。

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

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

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

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

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

如需詳細資訊,請參閱 撤銷系統管理員的使用者 PAT。

格式的變更

自 2024 年 7 月起,我們已大幅變更 Azure DevOps 所發行的 PAT 格式。 這些變更可提供更多安全性優點,並改善透過合作夥伴供應專案提供的秘密偵測工具,例如 適用於 Azure DevOps 的 GitHub 進階安全性。 這個新的 PAT 格式會遵循所有Microsoft產品的建議格式。 包含更多可識別的位可改善這些秘密偵測工具的誤判偵測率,並讓我們更快速地減輕偵測到的洩漏。

重要變更:

  • 增加令牌長度: 新的令牌現在 長度為84 個字元,且有52個字元是隨機化數據。 這個增加的長度可改善整體 Entropy,讓令牌對潛在的暴力密碼破解攻擊更具抵抗力。
  • 已修正簽章: 我們服務發出的令牌包含 76-80 位置的固定 AZDO 簽章。

需要採取動作:

  • 重新產生現有的 PAT: 強烈建議重新產生目前使用的所有 PAT,以利用這些安全性增強功能。
  • 整合者支援: 整合者應該更新其系統,以容納新的和現有的令牌長度。

重要

這兩種格式在可預見的未來仍然有效,但我們 積極鼓勵客戶轉換到新的84個字元格式。 隨著新格式的採用增加,我們考慮淘汰舊版 52 個字元的格式,以及該樣式發行的所有令牌。

常見問題集

問:為什麼我無法編輯或重新產生範圍設定為單一組織的 PAT?

答:請確定您已登入已設定 PAT 範圍的組織。 您可以在登入相同Microsoft Entra 識別符的任何組織時,檢視所有 PAT,但是當您登入其範圍所在的組織時,您只能編輯組織範圍的令牌。

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

答:當使用者從 Azure DevOps 移除時,PAT 會在 1 小時內失效。 如果您的組織已連線到 Microsoft Entra 識別碼,PAT 也會在 Microsoft Entra 識別符中失效,因為它屬於使用者。 我們建議將 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 仍然無法運作,請檢查它是否已過期。

問:如何? 建立未系結至特定人員以進行部署的存取密鑰?

答:在 Azure DevOps 中,您可以使用服務主體或管理身分識別,建立未繫結至特定人員的存取密鑰。 如需詳細資訊,請參閱管理服務連線在 Azure Pipelines 中使用 Azure 金鑰保存庫 秘密。