使用個人存取權杖
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:
- 使用者介面(UI): 透過用戶設定,如本文所述
- PAT 生命週期管理 API
若要建立非Microsoft工具的 PAT,您可以使用 Git 認證管理員 或手動產生它們。 建議您檢閱驗證 指引 ,以選擇適當的驗證機制。 PAT 為不需要大量解決方案的小型專案提供簡單的替代方案。 若沒有認證管理員,使用者每次都會輸入其認證。
必要條件
- 權限:
- 有權存取和修改管理 PAT 的用戶設定。
- 檢查許可權: 若要檢查您的許可權,請在 Azure DevOps 中執行下列其中一個程式:
- 移至您的配置檔,然後選取 [用戶設定>個人存取令牌]。 如果您可以在這裡看到及管理您的 PAT,您具有必要的許可權。
- 移至您的項目,然後選取 [項目設定>許可權]。 在清單中尋找您的用戶帳戶,並檢查指派給您的許可權。 尋找與管理令牌或用戶設定相關的許可權。
- 檢查許可權: 若要檢查您的許可權,請在 Azure DevOps 中執行下列其中一個程式:
- 如果您的組織有原則,Azure DevOps 系統管理員可能需要授與您特定許可權,或將您新增至允許清單以建立和管理 PAT。
- 視您想要使用 PAT 執行的工作而定,您可能需要額外的許可權。 例如:
- 組建:讀取和執行
- 程式代碼:讀取、寫入及管理
- 環境:讀取與管理
- 專案和小組:讀取、寫入及管理
- 變數群組:讀取和建立
- 有權存取和修改管理 PAT 的用戶設定。
- 存取層級: 至少具有基本存取權。
- 安全性最佳作法: 熟悉 管理 PAT 的安全性最佳做法 ,例如只在必要時使用,並定期輪替它們。
建立 PAT
登入您的組織 (
https://dev.azure.com/{Your_Organization}
)。從您的首頁開啟使用者設定 ,然後選取 [個人存取權杖]。
選取 [+ 新增權杖]。
為您的令牌命名、選取您想要使用令牌的組織,然後將令牌設定為在設定天數之後自動到期。
選取此令牌的範圍,以授權您的特定工作。
例如,若要為組建和發行代理程式建立令牌以向 Azure DevOps 進行驗證,請將令牌的範圍設定為代理程式集區(讀取及管理)。 若要讀取稽核記錄事件及管理或刪除數據流,請選取 [讀取稽核記錄],然後選取 [ 建立]。
注意
您可能會受限於建立完整範圍的 PAT。 如果是,您在 Microsoft Entra ID 中的 Azure DevOps 系統管理員已啟用原則,以將您限制為特定的自定義定義範圍集。 如需詳細資訊,請參閱 使用原則管理 PAT/限制建立完整範圍的 PAT。 針對自定義定義的 PAT,存取元件治理 API
vso.governance
所需的範圍無法在 UI 中選取。完成時,請複製權杖,並將其儲存在安全的位置。 針對您的安全性,它不會再次顯示。
在 Azure DevOps 中驗證所需的任何位置使用 PAT。
重要
- 請謹慎處理 PAT 與密碼一樣,並保密。
- 針對由 Microsoft Entra 識別碼所支持的組織,在 90 天內使用新的 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 服務: : 部署 Web 應用程式” 的令牌。
- 當您或系統管理員將 Web 負載測試設定為管線的一部分時,就會建立名為 “WebAppLoadTestCDIntToken” 的令牌。
- 設定Microsoft Teams整合延伸模組時,會建立名為“Microsoft Teams 整合”的令牌。
警告
使用 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 認證管理員。
- 安裝適用於 Windows 的 Git。
現有的存放庫
移除現有的原始來源: 如果您先前使用使用者名稱新增來源,請執行下列命令來移除它:
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 的範圍以變更其許可權。
從首頁開啟您的使用者設定,然後選取 [配置檔]。
在 [安全性] 底下,選取 [ 個人存取令牌]。 選取您要修改的令牌,然後 選取 [編輯]。
編輯令牌名稱、令牌到期或與令牌相關聯的存取範圍,然後選取 [ 儲存]。
撤銷 PAT
您可以隨時撤銷 PAT,原因如下:
- 如果您懷疑它遭到入侵,請撤銷 PAT。
- 不再需要 PAT 時撤銷。
- 撤銷 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 進行驗證。 如需詳細資訊,請參閱下列範例:dotnet、NuGet.exe。 如果您想要使用 Azure Pipelines 發佈套件,請使用 NuGet 驗證 工作來向摘要 範例進行驗證。
問:為什麼我的 PAT 停止運作?
答:PAT 驗證會要求您定期使用完整驗證流程登入 Azure DevOps。 每 30 天登入一次就足以供許多使用者使用,但視您的 Microsoft Entra 設定而定,您可能需要更頻繁地登入。 如果您的 PAT 停止運作,請先嘗試登入您的組織,並完成完整的驗證提示。 如果您的 PAT 仍然無法運作,請檢查它是否已過期。
問:如何? 建立未系結至特定人員以進行部署的存取密鑰?
答:在 Azure DevOps 中,您可以使用服務主體或管理身分識別,建立未繫結至特定人員的存取密鑰。 如需詳細資訊,請參閱管理服務連線、在 Azure Pipelines 中使用 Azure 金鑰保存庫 秘密。