Azure DevOps 服務
瞭解如何使用 OAuth 2.0 來驗證應用程式以進行 Azure DevOps REST API 存取,而不需要使用者重複提供認證。
重要
建議您針對新的應用程式使用 Microsoft Entra ID OAuth。 Azure DevOps OAuth 2.0 已淘汰,且自 2025 年 4 月起不再接受新的註冊,並已計劃於 2026 年 4 月完全淘汰。
OAuth 2.0 如何與 Azure DevOps 搭配運作
註
OAuth 2.0 僅適用於 Azure DevOps Services,不適用於 Azure DevOps Server。 針對內部部署案例,請使用 用戶端程式庫、Windows 驗證或 個人存取權杖。
Azure DevOps Services 會使用 OAuth 2.0 通訊協議 來授權應用程式,併產生 REST API 呼叫的存取令牌。 該過程涉及以下步驟:
- 應用程式註冊:向 OAuth 提供者註冊您的應用程式。
- 使用者授權:授予應用程式存取使用者資料的權限。
- 權杖交換:接收存取權杖以進行 API 呼叫。
- API 存取:將權杖用於已驗證的 REST API 請求。
- 權杖重新整理:重新整理過期的權杖以維持存取權。
OAuth 實作選項
根據應用程式的需求選擇適當的 OAuth 實作。
Microsoft Entra ID OAuth (建議)
Microsoft Entra ID OAuth 為 Azure DevOps 應用程式提供最安全且最未來的驗證方法。 優點包括:
- 企業整合:與現有的 Microsoft Entra ID 基礎結構無縫整合。
- 增強的安全性:進階安全性功能包括 Microsoft Entra 條件式存取和多重要素驗證。
- 未來支援:積極維護和支援的平台。
- 統一身分識別:跨 Microsoft 服務的單一登入體驗。
開始使用:請遵循我們的 Microsoft Entra ID OAuth 指南 ,以取得實作詳細數據和移轉指引。
Azure DevOps OAuth (已淘汰)
警告
Azure DevOps OAuth 已被取代。 自 2025 年 4 月起不再接受新應用程式註冊。 該服務計劃於 2026 年完全淘汰。 將現有的應用程式移轉至 Microsoft Entra ID OAuth。
針對現有的 Azure DevOps OAuth 應用程式:
- 檢閱 Azure DevOps OAuth 指南 ,以取得目前的實作詳細數據。
- 規劃在 2026 年之前移轉至 Microsoft Entra ID OAuth。
- 視需要管理現有的應用程式授權。
移轉規劃:儘早開始規劃移轉至 Microsoft Entra ID OAuth。 移轉指南提供順利過渡的秘訣和考量。
OAuth 範圍
範圍會定義應用程式可存取的 Azure DevOps 資源。 Microsoft Entra ID OAuth 和 Azure DevOps OAuth 都使用相同的範圍定義。
主要範圍考慮
- 最低許可權原則:只要求應用程式所需的最低範圍。
-
範圍繼承:某些範圍包含其他範圍(例如,
vso.code_manage包括vso.code_write)。 - API 涵蓋範圍:範圍可讓您存取 REST API,並只選取 Git 端點(不支援 SOAP API)。
- 使用者同意:用戶必須明確授與每個要求範圍的許可權。
尋找必要的範圍
若要判斷應用程式需要的範圍:
- 請檢查您計劃使用的每個端點的 API 參考文件。
- 在每個 API 頁面上尋找
scopes標頭。 - 若要避免要求備援許可權,請考慮範圍關聯性。
可用的範圍
| 類別 | Scope | 名稱 | 高特權 | 描述 | 繼承自 |
|---|---|---|---|---|---|
| 進階安全性 | vso.advsec |
進階安全性 (讀取) | 是的 | 授與讀取警示、結果實例和分析結果實例的能力。 | |
vso.advsec_write |
進階安全性 (讀取和寫入) | 是的 | 授予上傳襯線分析的能力。 | vso.advsec |
|
vso.advsec_manage |
進階安全性 (讀取、寫入和管理) | 是的 | 授予上傳襯線分析的能力。 | vso.advsec_write |
|
| 代理程式集區 | vso.agentpools |
代理程式集區 (讀取) | 提供檢視工作、集區、佇列、代理程式,以及代理程式目前正在執行或最近完成的工作的功能。 | ||
vso.agentpools_manage |
代理程式集區 (讀取和管理) | 是的 | 授與管理集區、佇列和代理程式的能力。 | vso.agentpools |
|
vso.environment_manage |
環境 (讀取和管理) | 是的 | 授與管理集區、佇列、代理程式和環境的能力。 | vso.agentpools_manage |
|
| Analytics | vso.analytics |
分析(閱讀) | 授與查詢分析數據的能力。 | ||
| Auditing | vso.auditlog |
稽核記錄 (讀取) | 授與使用者讀取稽核記錄的能力。 | ||
vso.auditstreams_manage |
稽核串流 (讀取) | 是的 | 授予使用者管理稽核流的權限。 | vso.auditlog |
|
| 建造 | vso.build |
組建(閱讀) | 授與存取組建成品的能力,包括建置結果、定義和要求,以及能夠透過服務攔截接收有關建置事件的通知。 | vso.hooks_write |
|
vso.build_execute |
建構 (讀取並執行) | 是的 | 授與存取建置成品的能力,包括建置結果、定義和要求。 也授與將組建排入佇列、更新組建屬性,以及透過服務勾點接收組建事件的通知。 | vso.build |
|
| Code | vso.code |
程式碼(閱讀) | 授予读取原始程式碼及有關認可、變更集、分支及其他版本控制工件的元數據的能力。 也授與搜尋程式碼的能力,並透過服務鉤子獲取版本控制事件的通知。 | vso.hooks_write |
|
vso.code_write |
程式代碼 (讀取和寫入) | 是的 | 授與讀取、更新和刪除原始程式碼的能力,以及存取有關認可、變更集、分支和其他版本控制成品的中繼資料。 也授與建立和管理提取要求和程式碼檢閱的能力,以及透過服務掛鉤接收版本控制事件的通知。 | vso.code |
|
vso.code_manage |
程式代碼 (讀取、寫入和管理) | 是的 | 提供讀取、更新和刪除原始程式碼的能力,以及存取有關提交、變更集、分支和其他版本控制工具的元數據。 同時授與建立和管理程式代碼存放庫、建立和管理提取要求和程式代碼檢閱,以及透過服務攔截接收版本控制事件的通知的能力。 | vso.code_write |
|
vso.code_full |
程式代碼 (完整) | 是的 | 提供對原始程式碼、提交的相關資料、變更集、分支及其他版本控制元素的完整存取權。 也授予建立和管理程式碼儲存庫、建立和管理提取請求和程式碼審查以及透過服務掛鉤接收有關版本控制事件的通知的能力。 也包含對用戶端 OM API 的有限支援。 | vso.code_manage |
|
vso.code_status |
代碼(狀態) | 授與讀取和寫入認可和提取要求狀態的能力。 | |||
| 已連線的伺服器 | vso.connected_server |
已連線的伺服器 | 授與從內部部署連線伺服器存取所需端點的能力。 | ||
| 權利 | vso.entitlements |
權利(閱讀) | 授與授權權利端點的唯讀存取權,以取得帳戶權利。 | ||
vso.memberentitlementmanagement |
成員權利管理(閱讀) | 授予讀取使用者、其授權以及他們可以存取的專案和延伸功能的能力。 | |||
vso.memberentitlementmanagement_write |
成員權利管理 (寫入) | 是的 | 授予管理使用者及其授權以及他們可以存取的專案和延伸功能的能力。 | vso.memberentitlementmanagement |
|
| Extensions | vso.extension |
延伸套件(讀取中) | 提供讀取已安裝擴充功能的能力。 | vso.profile |
|
vso.extension_manage |
擴充功能(讀取和管理) | 是的 | 授與在已安裝擴充功能上安裝、卸載及執行其他系統管理動作的能力。 | vso.extension |
|
vso.extension.data |
擴展資料(讀取) | 授與讀取已安裝延伸模組所儲存之數據(設定和檔)的能力。 | vso.profile |
||
vso.extension.data_write |
擴展資料(讀取與寫入) | 授與讀取和寫入已安裝延伸模組所儲存之數據(設定和檔)的能力。 | vso.extension.data |
||
| GitHub 連線 | vso.githubconnections |
GitHub 連線 (讀取) | 授與讀取 GitHub 連線和 GitHub 存放庫數據的能力。 | ||
vso.githubconnections_manage |
GitHub 連線 (讀取和管理) | 是的 | 授與讀取和管理 GitHub 連線和 GitHub 存放庫資料的能力。 | vso.githubconnections |
|
| 圖形和恆等式 | vso.graph |
圖表(閱讀) | 授與讀取使用者、群組、範圍和群組成員資格資訊的能力。 | ||
vso.graph_manage |
圖表(管理) | 是的 | 授與讀取使用者、群組、範圍和群組成員資格資訊、新增使用者和群組,以及管理群組成員資格的能力。 | vso.graph |
|
vso.identity |
身份識別(讀取) | 授予閱讀身分識別和群組的能力。 | |||
vso.identity_manage |
身分識別(管理) | 是的 | 授與讀取、寫入及管理身分識別和群組的能力。 | vso.identity |
|
| 機器群組 | vso.machinegroup_manage |
部署群組 (讀取、管理) | 是的 | 授與管理部署群組和代理程式集區的能力。 | vso.agentpools_manage |
| Marketplace | vso.gallery |
Marketplace | 授與公用和私人項目及發行者的讀取許可權。 | vso.profile |
|
vso.gallery_acquire |
Marketplace (取得) | 授予讀取許可權和取得項目的能力。 | vso.gallery |
||
vso.gallery_publish |
Marketplace (發佈) | 是的 | 授與讀取許可權,同時具備上傳、更新和分享項目的能力。 | vso.gallery |
|
vso.gallery_manage |
市集(管理) | 是的 | 授予讀取權限,以及發佈和管理項目與管理發行者的權限。 | vso.gallery_publish |
|
| 通知 | vso.notification |
通知(已讀) | 授與訂閱和事件中繼資料的讀取權限,包括可篩選的欄位值。 | vso.profile |
|
vso.notification_write |
通知(寫入) | 授與訂閱的讀取和寫入存取權,以及事件中繼資料的讀取存取權,包括可篩選的欄位值。 | vso.notification |
||
vso.notification_manage |
通知(管理) | 授與訂閱的讀取、寫入和管理存取權,以及事件中繼資料的讀取存取權,包括可篩選的欄位值。 | vso.notification_write |
||
vso.notification_diagnostics |
通知(診斷) | 授與通知相關診斷記錄的存取權,並授與啟用個別訂用帳戶診斷的能力。 | vso.notification |
||
| 包裝 | vso.packaging |
包裝(已讀取) | 提供讀取訊息來源和套件的權限。 | vso.profile |
|
vso.packaging_write |
封裝(讀取與寫入) | 是的 | 授與建立和讀取資訊流和套件的能力。 | vso.packaging |
|
vso.packaging_manage |
封裝(讀取、寫入和管理) | 是的 | 授予建立、讀取、更新和刪除資料源和套件的能力。 | vso.packaging_write |
|
| 管線資源 | vso.pipelineresources_use |
管線資源 (使用) | 是的 | 授與核准管線使用受保護資源的要求的能力:代理程式集區、環境、佇列、存放庫、安全檔案、服務聯機和變數群組。 | |
vso.pipelineresources_manage |
管線資源 (使用和管理) | 是的 | 授與管理受保護資源或管線使用受保護資源之要求的能力:代理程式集區、環境、佇列、存放庫、安全檔案、服務連線和變數群組。 | vso.pipelineresources_use |
|
| 專案和團隊 | vso.project |
專案與團隊(閱讀) | 授予讀取專案和團隊的權限。 | ||
vso.project_write |
專案和團隊(讀取和寫入) | 授與讀取和更新專案及團隊的權限。 | vso.project |
||
vso.project_manage |
專案和小組 (讀取、寫入和管理) | 是的 | 授與建立、讀取、更新和刪除專案和小組的能力。 | vso.project_write |
|
| 釋放 | vso.release |
釋放(閱讀) | 授與讀取發行構件的能力,包括發行、發行定義及發行環境。 | vso.profile |
|
vso.release_execute |
釋放 (讀取、寫入和執行) | 是的 | 授與讀取和更新發行構件的能力,包括發行、發行定義及發行環境。 也授與將新版本排入佇列的能力。 | vso.release |
|
vso.release_manage |
發行 (讀取、寫入、執行和管理) | 是的 | 授與讀取、更新及刪除發行構件的能力,包括發行、發行定義及發行環境。 也授與排隊和核准新版本的能力。 | vso.release_execute |
|
| 保護檔案 | vso.securefiles_read |
保護檔案 (讀取) | 是的 | 授與讀取安全檔案的能力。 | |
vso.securefiles_write |
保護檔案 (讀取和建立) | 是的 | 授與讀取和建立安全檔案的能力。 | vso.securefiles_read |
|
vso.securefiles_manage |
保護檔案 (讀取、建立和管理) | 是的 | 授與讀取、建立和管理安全檔案的能力。 | vso.securefiles_write |
|
| 安全性 | vso.security_manage |
安全性(管理) | 是的 | 授與讀取、寫入和管理安全性許可權的能力。 | |
| 服務連線 | vso.serviceendpoint |
服務端點 (讀取) | 授與讀取服務端點的能力。 | vso.profile |
|
vso.serviceendpoint_query |
服務端點 (讀取和查詢) | 授與讀取和查詢服務端點的能力。 | vso.serviceendpoint |
||
vso.serviceendpoint_manage |
服務端點 (讀取、查詢和管理) | 是的 | 授與讀取、查詢及管理服務端點的能力。 | vso.serviceendpoint_query |
|
| 服務鉤子 | vso.hooks |
服務掛勾(讀取) | 授與讀取服務鉤子訂閱和元數據的權限,包括支援的事件、使用者和動作。 (不再公開。 | vso.profile |
|
vso.hooks_write |
服務掛勾(讀取和寫入) | 授與建立和更新服務掛勾訂閱和讀取元數據的能力,包括支援的事件、消費者和動作。 (不再公開。 | vso.hooks |
||
vso.hooks_interact |
服務掛勾(互動) | 授與能夠對透過服務 Hook 所接收的事件進行互動和執行操作的能力。 (不再公開。 | vso.profile |
||
| 設定 | vso.settings |
設定(查看) | 提供讀取設定的權限。 | ||
vso.settings_write |
設定(讀取與寫入) | 授與讀取和寫入設定的能力。 | vso.settings |
||
| 符號 | vso.symbols |
符號(閱讀) | 授與讀取符號的能力。 | vso.profile |
|
vso.symbols_write |
符號(讀取和寫入) | 授與讀取和寫入符號的能力。 | vso.symbols |
||
vso.symbols_manage |
符號 (讀取、寫入及管理) | 授與讀取、寫入和管理符號的能力。 | vso.symbols_write |
||
| 工作群組 | vso.taskgroups_read |
工作群組 (讀取) | 授予讀取任務群組的權限。 | ||
vso.taskgroups_write |
工作群組 (讀取和建立) | 賦予讀取和建立工作組的能力。 | vso.taskgroups_read |
||
vso.taskgroups_manage |
工作群組 (讀取、建立和管理) | 是的 | 授予讀取、建立和管理任務群組的能力。 | vso.taskgroups_write |
|
| 團隊儀表板 | vso.dashboards |
團隊儀錶板(閱讀) | 授與讀取團隊儀表板資訊的能力。 | ||
vso.dashboards_manage |
團隊儀錶板(管理) | 允許管理團隊儀表板資訊。 | vso.dashboards |
||
| 測試管理 | vso.test |
測試管理(讀) | 授與讀取測試計劃、案例、結果及其他測試管理相關構件的能力。 | vso.profile |
|
vso.test_write |
測試管理(讀取和寫入) | 授與讀取、建立及更新測試計劃、案例、結果及其他測試管理相關構件的能力。 | vso.test |
||
| Threads | vso.threads_full |
PR 討論 | 授予讀取和寫入拉取請求評論線程的權限。 | ||
| Tokens | vso.tokens |
委派授權權杖 | 是的 | 授與管理委派授權令牌給使用者的能力。 | |
vso.tokenadministration |
權杖管理 | 是的 | 授與管理現有令牌的能力(檢視和撤銷)給組織系統管理員。 | ||
| 用戶個人資料 | vso.profile |
使用者設定檔(讀取) | 授予讀取您的個人資料、帳戶、收藏、專案、團隊和其他高層級組織構件的權限。 | ||
vso.profile_write |
使用者檔案(寫入) | 授權寫入您個人檔案的功能。 | vso.profile |
||
| 變數群組 | vso.variablegroups_read |
變數群組 (讀取) | 授與讀取變數群組的能力。 | ||
vso.variablegroups_write |
變數群組 (讀取和建立) | 授與讀取和建立變數群組的能力。 | vso.variablegroups_read |
||
vso.variablegroups_manage |
變數群組 (讀取、建立和管理) | 是的 | 授予讀取、建立和管理變數群組的能力。 | vso.variablegroups_write |
|
| 維基 | vso.wiki |
Wiki(點選閱讀) | 授予讀取 Wiki、Wiki 頁面和 Wiki 附件的能力。 同時授與搜尋Wiki頁面的能力。 | ||
vso.wiki_write |
Wiki (讀取與寫入) | 授予讀取、建立和更新 Wiki、Wiki 頁面和 Wiki 附件的能力。 | vso.wiki |
||
| 工作項目 | vso.work |
工作項目(閱讀) | 授與讀取工作專案、查詢、面板、區域和反覆專案路徑,以及其他工作專案追蹤相關中繼資料的能力。 也授與執行查詢、搜尋工作專案,以及透過服務攔截接收工作專案事件的通知。 | vso.hooks_write |
|
vso.work_write |
工作項目 (讀取與寫入) | 授與讀取、建立和更新工作專案和查詢、更新面板中繼資料、讀取區域和反覆專案路徑以及其他工作專案追蹤相關中繼資料、執行查詢,以及透過服務攔截接收工作專案事件的通知。 | vso.work |
||
vso.work_full |
工作項目(完整) | 授與工作專案、查詢、待辦專案、計劃和工作專案追蹤中繼資料的完整存取權。 也授與透過服務攔截接收工作專案事件通知的能力。 | vso.work_write |
||
| 使用者模擬 | user_impersonation |
使用者模擬 | 是的 | 授與 Visual Studio Team Services REST API 的完整存取權。 請謹慎要求或同意此範圍,因為它非常強大。 |
常見問題
Q. 我可以將 OAuth 與行動應用程式搭配使用嗎?
A。 否。 Azure DevOps Services 僅支援網頁伺服器流程 (授權程式代碼流程),這需要安全地儲存應用程式秘密。 行動應用程式無法安全地儲存秘密,這使得 OAuth 不適合行動場景。
行動應用程式的替代方案:使用 個人存取令牌 進行行動應用程式驗證。
Q. OAuth 是否適用於所有 Azure DevOps API?
A。 OAuth 支援 REST API,並僅選取 Git 端點。 SOAP API 不支援 OAuth 驗證。
Q. 如何從 Azure DevOps OAuth 移轉至 Microsoft Entra ID OAuth?
A。 請遵循 Microsoft Entra ID OAuth 移轉指南,其中包括:
- 逐步移轉指示。
- 程式碼範例和最佳做法。
- 淘汰的時間軸考量。
Q. 2026 年之後,我現有的 Azure DevOps OAuth 應用程式會發生什麼事?
A。 現有的 Azure DevOps OAuth 應用程式會在 2026 年完全取代服務時停止運作。 請在期限前充分規劃將移轉至Microsoft Entra ID OAuth。
選擇您的實作路徑
- 針對新應用程式:使用 Microsoft Entra ID OAuth 建置
- 針對現有的 Azure DevOps OAuth 應用程式:規劃移轉至 Microsoft Entra ID
- 對於需要立即支援的現有應用程式:Azure DevOps OAuth 檔