使用個人存取權杖

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

個人存取權杖(PAT)是 Azure DevOps 認證的另一種密碼。 PAT會識別你,並決定你可用的資源和操作。 把 PAT 當成密碼一樣小心對待。

謹慎

當有更安全的認證方法可用時,請避免使用PAT。 對於應用程式與自動化,盡可能使用 Microsoft Entra 令牌、管理身份或服務主體。

如果工具不支援 Microsoft Entra 認證,請使用具有組織範圍的 PAT 程式,且範圍最小且實用壽命最短。

Important

Azure DevOps 將淘汰全域個人存取權杖 (PAT)。 所有現有的全球 PAT 將於 2026 年 12 月 1 日停止運作。 現在就將他們遷移到組織範圍的 PAT 或 Microsoft Entra 認證。 欲了解更多資訊,請參閱 Azure DevOps 中全球個人存取權杖的退休。

必要條件

  • 存取 Azure DevOps 組織或 Azure DevOps Server 集合。
  • PAT所存取的資源與操作所需的權限。 PAT 所能授與的權限,不得超過其擁有者所具備的權限。
  • 根據貴組織政策建立 PAT 的權限。 管理員可以限制 PAT 的建立、範圍和生命週期。 欲了解更多資訊,請參閱「用政策管理 PAT」。

建立 PAT

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

  2. 在首頁開啟使用者設定 ,選擇 個人存取權杖。

    已選取「Personal access tokens」的使用者設定螢幕擷圖。

  3. 選取 + 新增代幣。

    個人存取令牌頁面截圖,選中新令牌。

  4. 輸入名稱,選擇一個組織,並設定有效期限。

    建立對話截圖,包含 PAT 名稱、組織和到期日設定。

  5. 只選擇執行預定任務所需的 範圍 。

    例如,要註冊自架代理,請選擇代理池(讀取與管理)。 您的管理員可能會限制完整範圍權限的 PAT,或要求針對特定範圍先加入允許清單。

    顯示範圍選項的螢幕擷圖,其中已選取新 PAT 所需的範圍。

  6. 選擇 建立,複製令牌,並儲存在安全位置。 代幣價值之後就沒再出現。

    一張新 PAT 截圖,準備複製以供安全儲存。

備註

以下截圖顯示的是 Azure DevOps 服務。 Azure DevOps Server 介面可能會有少少不同。

  1. 登入您的Azure DevOps Server網頁入口網站(https://{server}/{collection} 或 http://{server}:{port}/tfs/{collection})。

  2. 在首頁開啟使用者設定 ,選擇 個人存取權杖。

    已選取「個人存取權杖」的使用者設定畫面截圖。

  3. 選取 + 新增代幣。

    個人存取令牌頁面截圖,選中新令牌。

  4. 輸入名稱、選擇合集並設定到期日。

    建立對話框的截圖,包含 PAT 名稱、集合和到期日。

  5. 只選擇執行預定任務所需的 範圍 。

    例如,要註冊自架代理,請選擇代理池(讀取與管理)。

    顯示範圍選項的螢幕擷取畫面,已選取新 PAT 所需的範圍。

  6. 選擇 建立,複製令牌,並儲存在安全位置。 代幣價值之後就沒再出現。

    一張新 PAT 截圖,準備複製以供安全儲存。

對於使用 Microsoft Entra ID 支援的組織,請在 90 天內重新登入 PAT,否則 PAT 將失效。 如需詳細資訊,請參閱 條件式存取的使用者登入頻率。

通知

Azure DevOps 會在你建立 PAT 時發送通知,並在 PAT 到期前再發送另一通知。

確認已建立 PAT 的電子郵件截圖。

如果組織政策不再允許您重新產生 PAT,過期郵件會標示該限制。 如果您需要允許清單項目,請聯絡專案集合管理員。

有關電子郵件設定的資訊,請參閱 「配置 SMTP 伺服器並自訂電子郵件以接收警報與回饋請求」。

未預期的通知

意外通知可能代表管理員或工具為你建立了 PAT。 常見的代幣名稱包括:

  • git: https://dev.azure.com/{organization} on {machine}當 Git 連接到 Azure Repos 倉庫時所建立的。
  • Service Hooks: Azure App 服務: Deploy web app, 在配置 Azure App 服務 部署時所建立。
  • Microsoft Teams Integration,在設定 Microsoft Teams 整合時建立。

如果你無法辨識 PAT,請撤銷它並變更密碼。 對於 Microsoft Entra 帳號,請你的管理員檢視不熟悉的登入活動。

使用 PAT

對於一次性請求、本地原型或不支援 Microsoft Entra 認證的工具,請使用 PAT。 不要把 PAT 當作生產應用或服務的長期憑證。

Azure DevOps 透過 HTTP Basic 認證標頭接受 PAT。 使用者名稱可以是空的。 用 base64 編碼字串 :{PAT},並在此標頭中使用所得值:

Authorization: Basic BASE64_ENCODED_PAT

以下範例預期 AZURE_DEVOPS_PAT 環境變數會從安全的秘密來源填充。

$patBytes = [Text.Encoding]::ASCII.GetBytes(":$env:AZURE_DEVOPS_PAT")
$headers = @{ Authorization = "Basic $([Convert]::ToBase64String($patBytes))" }

Invoke-RestMethod `
  -Uri "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.1" `
  -Headers $headers

原型完成後,將它遷移到 Microsoft Entra OAuth 以進行委派使用者存取,或以服務主體或管理身份來存取應用程式。

修改 PAT

你可以更改 PAT 的名稱、有效期限或範圍。 重新產生 PAT 會產生新的 token 值,並使先前的值失效。 你無法修改或重新生成過期或撤銷的 PAT;而是創建一個新的。

  1. 在首頁開啟使用者設定 ,選擇 個人存取權杖。

  2. 選擇 PAT,然後選擇 編輯。

    已選取「編輯」的現有 PAT 截圖。

  3. 更改標記名稱、到期日或範圍,然後選擇 儲存。

    更新後的 PAT 設定截圖,準備儲存。

撤銷 PAT

當 PAT 被入侵、不再需要,或權限超過要求時,請撤銷。

  1. 在首頁開啟使用者設定 ,選擇 個人存取權杖。

  2. 選擇 PAT,然後選擇 撤銷。

    已選取 [撤銷] 的現有 PAT 螢幕擷取畫面。

  3. 在確認對話框中,選擇 撤銷。

    撤銷 PAT 確認對話的截圖。

替換即將過期或被撤銷的 PAT

PAT過期或被撤銷後,Azure DevOps會拒絕後續使用該認證的驗證嘗試。 管線、腳本、套件客戶端或 Git 操作通常在下一次認證時失敗。 Azure DevOps 並不保證撤銷會終止所有已建立的連線。

在 PAT 到期前輪替

若要在不造成可避免的服務中斷的情況下替換 PAT:

  1. 建立一個僅具備必要權限範圍且有效期限較短的組織範圍 PAT。

  2. 把新值存進你的秘密儲存庫。 不要在 Git 遠端網址、 .git/config原始碼、管線 YAML 或日誌中嵌入 PAT。

  3. 在更新每個依賴前,先用非生產操作或一個整合測試新的 PAT。

  4. 更新儲存舊 PAT 的服務或工具:

    Integration 更新憑證的地點
    Git Git 憑證管理器或其他安全憑證管理器
    Azure Pipelines 秘密變數、變數群組或服務連線
    Azure Artifacts Azure Artifacts 憑證提供者或套件管理器的安全配置
    腳本與 REST 用戶端 秘密儲存或受保護環境變數
    協力廠商工具 工具的安全憑證存放區
  5. 測試每一次更新的整合。 執行受影響的管線、Git 操作、套件操作、腳本或 API 請求,並檢查是否有認證失敗。

  6. 撤銷舊的 PAT。

請記錄每個 PAT 的擁有者、目的、範圍、到期日及相依整合。 請根據貴組織的政策和該情境的風險,在 PAT 到期前進行替換。

到期或遭撤銷後復原

如果 PAT 意外停止運作:

  1. 在 個人存取令牌 頁面,查看 PAT 的狀態與到期時間。
  2. 建立一個只包含受影響整合所需範圍的替代 PAT。
  3. 更新儲存無法取得 PAT 的整合系統。
  4. 測試每個整合,並監控其下一次排程作業是否發生驗證失敗。

若故障原因不明,請檢視 PAT稽核事件 ,判斷PAT是否已過期、更新或被撤銷。

使用生命週期管理 API 管理 PAT。

使用 PAT 生命週期管理 API 程式化地列出、建立、更新及撤銷您自己的 PAT。

這些 API 需要透過使用者委派流程取得的 Microsoft Entra 存取權杖。 使用vso.pats範圍。 服務主體和受管理身份無法建立或管理 PAT,因為它們不代表使用者。

行動 請求
列出 PATs GET https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?api-version=7.1
建立 PAT POST https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?api-version=7.1
撤銷 PAT DELETE https://vssps.dev.azure.com/{organization}/_apis/tokens/pats?authorizationId={authorizationId}&api-version=7.1

將 Microsoft Entra 代幣作為持有人代幣發送。 創作請求使用以下身體形狀:

{
  "displayName": "CI build access",
  "scope": "vso.build",
  "validTo": "{expiration-in-UTC}",
  "allOrgs": false
}

列表回應會回傳陣列中的 patTokens 標記。 建立回應只會在 patToken.token 中傳回一次秘密。 將這些數值安全儲存,切勿寫入日誌。 要撤銷舊的標記,請將其作為表格中顯示的查詢參數傳遞 authorizationId 。

完整架構與範例請參見「列出 PAT」、「建立 PAT 」及「撤銷 PAT」。

回顧PAT稽核活動

Azure DevOps Services 會在組織稽核日誌中記錄 PAT 生命週期事件。 在 組織設定中,選擇 審計,然後篩選以下操作:

Action Event
已建立一個 PAT Token.PatCreateEvent
PAT過期 Token.PatExpiredEvent
PAT 存在於公開倉庫中 Token.PatPublicDiscoveryEvent
使用者撤銷 PAT Token.PatRevokeEvent
Azure DevOps 撤銷 PAT Token.PatSystemRevokeEvent
PAT會被修改或再生 Token.PatUpdateEvent

令牌存取事件目前未記錄。 使用稽核日誌來調查生命週期變更,而非判斷何時或是否使用了 PAT。

審計日誌保存

審計事件會保留90天,之後刪除。 保留期限無法設定。 若要延長事件保留時間,請匯出為 CSV 或 JSON,或將稽核串流配置至外部安全資訊與事件管理(SIEM)系統。

欲了解更多資訊,請參閱存取、匯出與篩選稽核日誌及 Azure DevOps 稽核事件。

設定 PAT 政策

租戶管理員可以限制全域 PAT 與全範圍 PAT,設定最大 PAT 壽命,並控制洩漏 PAT 的自動撤銷。 在組織設定>中設定租戶層級的 PAT 政策 Microsoft Entra。

組織擁有者可在 組織設定>政策中限制個別組織的 PAT 建立。 關於角色、政策行為及允許清單程序,請參見「用政策管理 PAT」。

PAT 格式

PAT 字串採用可識別格式,提升秘密偵測並減少誤報。

  • PAT 長度為 84 個字元,其中 52 個隨機字元。
  • Azure DevOps PAT 在第 76 至 80 位包含固定AZDO簽章。

如果你的整合能驗證 PAT,請支援 84 字元格式。 如需了解洩漏權杖控管,請參閱 自動撤銷已洩漏的 PAT。

使用 PAT 的最佳做法

考慮替代方案

建立 PAT

  • 僅建立組織範圍內的 PAT。 全球 PAT 將於 2026 年 12 月 1 日停止運作。
  • 請為每個工具或工作流程使用不同的 PAT。
  • 只選擇任務所需的範圍。
  • 盡量縮短壽命。
  • 不要在顯示名稱中包含個人資料或代幣價值的任何部分。

管理 PAT

  • 不要分享 PAT。
  • 將 PAT 儲存在安全的秘密儲存庫中,例如 Azure Key Vault。
  • 在PAT到期前更換,並在不再需要時撤銷。
  • 如果 PAT 被揭露或被破壞,請立即撤銷。

給行政人員

  • 限制全範圍的 PAT 並根據你的安全需求設定最大壽命。
  • 限制在不需要 PAT 的組織中建立 PAT。
  • 使用支援的憑證管理 API 來撤銷使用者的 PAT。
  • 偏好使用 Microsoft Entra 認證來服務與自動化。

審查並回應風險較高的 PAT

作為你安全審查的一部分:

  1. 識別具有完整範圍、長壽命、全球存取權,或無紀錄擁有者與用途的 PATs。
  2. 檢視審計日誌中的 PAT 建立、更新、公開發現、到期及撤銷事件。 因為權杖存取不會被記錄,所以不要用稽核日誌來判斷 PAT 是活躍還是過期。
  3. 撤銷已外洩、已遭入侵或不必要的 PAT。 進行離職處理時,請使用受支援的 Token Administration API 來撤銷使用者的 PAT,並通知受影響整合的擁有者。
  4. 設定租戶與組織的 PAT 政策 ,以限制全域及全範圍 PAT,設定最大壽命,並控制洩漏 PAT 的自動撤銷。
  5. 當您的保留要求超過 90 天時,匯出稽核事件或設定稽核流程。

常見問題集

為什麼我無法編輯或重新生成一個針對某個組織的 PAT ?

請登入 PAT 範圍所在的組織。 你可以透過更改存取範圍篩選器,列出同一 Microsoft Entra 租戶中任何組織的 PAT,但只能從該組織編輯組織範圍的 PAT。

當使用者帳號被停用時,PAT 會發生什麼事?

當帳號被停用或從組織中移除時,該帳號的 PAT 將無法再存取該組織的資源。 Azure DevOps 不會自動刪除 PAT。 如果存取權恢復,尚未過期或未被撤銷的 PAT 將依使用者目前的權限運作。

我可以把 PAT 搭配所有 Azure DevOps REST API 使用嗎?

否。 PATs 可與大多數 Azure DevOps REST API 合作。 部分 API,包括組織、個人資料及 PAT 生命週期管理 API,需要 Microsoft Entra 令牌。

如果我將 PAT 提交到公開的 GitHub 倉庫會發生什麼事?

Azure DevOps 會掃描公開的 GitHub 倉庫,尋找洩漏的 PAT 文件。 當偵測到令牌時,Azure DevOps 會通知擁有者並記錄稽核事件。 除非租戶政策禁用自動撤銷,否則 Azure DevOps 會撤銷洩漏的 PAT。 如需詳細資訊,請參閱 自動撤銷外洩的 PAT。

我可以用 PAT 作為 API 金鑰來發佈 NuGet 套件嗎?

否。 Azure Artifacts 不支援將 PAT 當作 API 金鑰傳遞。 在本地開發環境中,安裝 Azure Artifacts 憑證提供者。 在 Azure Pipelines 中,使用 NuGet Authenticate 任務。

範例請參見 Publish with dotnet、Publish with NuGet.exe以及 Publish NuGet 套件與 Azure Pipelines。

為什麼我的 PAT 停止工作?

檢查 PAT 是否已過期、被撤銷、失效、範圍不足,或屬於權限變更的使用者。 對於由 Microsoft Entra ID 支援的組織,請登入 Azure DevOps,完成完整的認證提示,然後再試一次。 你的條件存取設定可能需要更頻繁的登入。

對於 Azure DevOps Server,IIS Basic Authentication 會阻止 PAT 認證。 請關閉 IIS 基本認證。

如何建立不與使用者綁定的存取權杖?

PATs總是與創建它們的使用者相關聯。 對於非使用者身份,請使用由應用程式服務主體或管理身份所發出的 Microsoft Entra 令牌。 管線方面,請使用 服務連線。

我該如何在 API 中輪流執行 PAT?

生命週期管理 API 不會在一次操作中重新產生 PAT。 列出舊 PAT 以取得其中繼資料,建立具有所需範圍和到期日的新 PAT,更新並測試每個相依整合,然後使用其 authorizationId 撤銷舊 PAT。 關於正確的路由,請參閱 使用生命週期管理 API 管理 PATs。

為什麼當我呼叫 PAT 生命週期管理 API 時,會出現管理員批准訊息?

您的租戶安全政策要求管理員同意,Microsoft Entra 應用程式才能存取組織資源。 聯絡你的租戶管理員。