Azure DevOps 的身份验证方法

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

本文介绍 Azure DevOps 集成的身份验证方法,并帮助你为方案选择最佳选项。 新式身份验证方法(如 Microsoft Entra ID)提供增强的安全性,并为新应用程序提供最佳方法。

重要

对于与 Azure DevOps Services 集成的新应用程序,建议使用 Microsoft Entra ID 身份验证。 请谨慎使用个人访问令牌,并且仅在Microsoft Entra ID 不可用时使用它们。

OAuth 2.0 和 Microsoft Entra ID 身份验证仅适用于 Azure DevOps Services,而不适用于 Azure DevOps Server。

对于本地方案,请使用 .NET 客户端库、Windows 身份验证或 个人访问令牌

基于场景的身份验证方法

根据应用程序类型和要求选择适当的身份验证方法:

应用程序类型 说明 示例 推荐的方法 代码示例
Web/桌面应用 使用当前框架的交互式应用程序 React 应用,.NET 桌面应用 Microsoft Entra OAuth 与 Microsoft 身份验证库 (MSAL) 托管客户端控制台应用
服务/后台应用 在没有用户交互的情况下运行的应用程序 Azure Functions、后台服务 服务主体与托管身份 服务主体
传统客户端应用 使用客户端库的现有应用程序 使用 Azure DevOps .NET 库的控制台应用 使用 OAuth 的 .NET 客户端库 客户端库控制台应用
无界面/命令行界面应用 非交互式命令行工具 生成脚本,自动化工具 设备授权授予流 设备配置文件
Azure DevOps 扩展 在 Azure DevOps 中运行的扩展 自定义仪表板小组件和工作项窗体 Azure DevOps Web 扩展 SDK 添加仪表板小部件
Azure DevOps Server 应用 本地部署的 Azure DevOps Server 集成 自定义服务器扩展 .NET 客户端库 或 Windows 身份验证 客户端库控制台应用
个人/临时脚本 个人使用的快速脚本 PowerShell 脚本、curl 命令 个人访问令牌 REST API 入门

入门建议

以下部分提供了在不同场景下入门的建议。

新应用程序

现有应用程序

  • 计划从个人访问令牌迁移到 Microsoft Entra ID 身份验证。
  • 考虑 Azure DevOps 改进的 身份验证迁移时间线 ,并减少个人访问令牌的使用。
  • 根据安全最佳做法查看当前的身份验证方法。

Azure DevOps Server

  • 尽可能将 .NET 客户端库 与 Windows 身份验证配合使用。
  • 对于某些 Azure DevOps Server 方案,个人访问令牌是可以接受的。
  • 规划未来的 Azure DevOps Services 迁移,以利用新式身份验证。

常见问题的解答

以下部分提供常见问题的解答。

我是否应使用 Microsoft Entra ID OAuth 或个人访问令牌?

以下方案中使用 Microsoft Entra ID OAuth

  • 新的应用程序和集成
  • 需要可靠安全性的生产工作负荷
  • 需要企业标识集成的应用程序
  • 需要符合合规要求的长期项目

仅在以下方案中使用个人访问令牌

  • 个人脚本和即席任务
  • 迁移规划过程中的旧版应用程序
  • Azure DevOps Server 情况,其中新式身份验证不可用

我应该使用服务主体或用户委派进行身份验证吗?

在以下方案中使用服务主体或托管标识

  • 生成独立运行的应用程序(后台服务、自动化)
  • 创建不需要用户交互的应用
  • 实现服务间通信
  • 构建 CI/CD 管道或自动化工作流

在以下场景中使用用户委派(OAuth 与用户同意)

  • 构建代表人类用户执行操作的应用。
  • 创建交互式应用,让用户使用自己的凭据登录
  • 实现需要用户特定权限的功能
  • 构建尊重用户个人访问权限的应用

如何使用 Azure DevOps Server 和 Azure DevOps Services 进行身份验证?

最佳做法是创建单独的身份验证路径:

  • Azure DevOps Services:使用 Microsoft Entra ID OAuth。
  • Azure DevOps Server:将 .NET 客户端库与 Windows 身份验证或个人访问令牌配合使用。

requestContext使用该方法检测服务类型并应用适当的身份验证方法。

为什么我的服务帐户无法访问 Azure DevOps API?

下面是可能影响服务帐户访问的一些常见问题:

  • 服务帐户未“实例化”:使用正确的登录方法。 服务帐户需要交互式登录权限或适当的Microsoft Entra ID 注册。
  • 权限不足:确保服务帐户具有适当的 Azure DevOps 权限。
  • 身份验证方法:使用服务主体或托管标识,而不是尝试作为服务帐户进行身份验证。

如何从个人访问令牌迁移到新式身份验证?

完成以下步骤:

  1. 确定应用程序中当前的个人访问令牌使用情况。

  2. 选择备用身份验证方法:

    • 适用于用户委托场景的 Microsoft Entra ID OAuth
    • 适用于服务间通信场景的服务主体
  3. 使用 Azure DevOps 迁移身份验证示例更新身份验证代码。

  4. 在删除任何个人访问令牌依赖项之前,请彻底测试更改。

  5. 监视并验证新的身份验证方法。

实现过程

为方案选择身份验证方法后,请完成实现: