使用 Azure Repos 进行身份验证

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

安全身份验证是保护 Azure Repos 和 Azure DevOps Server Git 存储库的基础。 借助多种可用的身份验证选项(Microsoft Entra OAuth 令牌、个人访问令牌和 SSH 密钥),选择正确的方法可确保开发工作流的安全性和工作效率。

Microsoft Entra OAuth 令牌被推荐为 现代开发团队的首选方案,通过 OAuth 2.0 标准提供增强的安全性,并与企业身份系统无缝集成。 无论是使用命令行、使用 Git 客户端还是与 CI/CD 管道集成,选择具有适当范围限制的身份验证方法都会降低安全风险,同时维护所需的访问。

一旦不再需要,始终撤销或轮换凭据。 这种做法维护存储库安全性,并遵循最低特权访问原则。

身份验证机制

Microsoft Entra 令牌是 Git 操作和 REST APIs 的首选身份验证方法。 它们提供增强的安全功能,并可在使用个人访问令牌的任何位置使用。 这些令牌是为用户主体或 托管身份和/或服务主体生成的。

Azure CLI 快速入门:可以使用 Azure CLI 获取 Microsoft Entra 令牌,以便立即与 Git作配合使用。 此方法非常适合用于测试或一次性操作。

对于用户身份验证:

 az login
 az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv

对于服务主体身份验证: 首先 以服务主体身份登录,然后获取令牌:

az login --service-principal -u <client-id> -p <client-secret> --tenant <tenant-id>
az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv

Git 的示例用法:

$accessToken = az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
git -c http.extraheader="AUTHORIZATION: bearer $accessToken" clone https://dev.azure.com/{yourOrgName}/{yourProjectName}/_git/{yourRepoName}

个人访问令牌(可选选项)

注释

尽管仍支持个人访问令牌, 但建议使用Microsoft Entra OAuth 令牌,以获得更好的安全性和现代身份验证做法。

个人访问令牌(PAT) 提供对 Azure DevOps 的访问权限,而无需直接使用用户名和密码。 如果这些令牌过期,可限制他们可以访问的数据范围。

在以下情况下使用 PAT:

  • 系统上未设置 SSH 密钥
  • 需要限制凭据授予的权限
  • 在您的场景中,Microsoft Entra OAuth 令牌不可用。

Git 交互需要用户名,该用户名可以是空字符串以外的任何内容。 若要将 PAT 与 HTTP 基本身份验证配合使用,请使用 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

SSH 密钥

通过在计算机上创建的公钥和私钥对,使用 SSH 进行密钥身份验证。 你将公钥与在 Web 上的用户名相关联。 使用 Git 时,Azure DevOps 会使用该密钥加密发送给你的数据。 使用不会通过网络共享或发送的私钥解密计算机上的数据。

显示将 SSH 公钥添加到 Azure DevOps 的动图

如果已在系统上设置 SSH,则 SSH 是一个不错的选择,只需将公钥添加到 Azure DevOps 并使用 SSH 克隆存储库即可。 对于运行 Linux、macOS 或 Git for Windows 的 Windows 系统,SSH 可能是首选,因为无法使用 Git 凭据管理器个人访问令牌 进行 HTTPS 身份验证。

有关详细信息,请参阅使用 Azure DevOps 设置 SSH

使用 Git 凭据管理器生成令牌

使用 Git 凭据管理器(GCM),可以避免反复输入凭据,并提升访问 Azure Repos 时令牌的安全性。 登录到 Web 门户,生成一个令牌,然后在连接到 Azure Repos 时使用该令牌作为密码。 当安装了凭据管理器并将其保存在本地以供 Git 命令行或其他客户端使用时,可以根据需要生成 Microsoft Entra 令牌(推荐)或 PAT。

现有存储库

  • 删除现有源: 如果以前使用用户名添加源,请运行以下命令将其删除:

    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 是指 Azure DevOps for Git 存储库中使用的 URL 路径结构。 /_git/ 段指示你正在访问 Git 存储库,应将 do 替换为存储库的实际名称。 例如,如果存储库命名为 my-repo,则路径为“/_git/my-repo”。

  • 克隆存储库: 如果使用 Git 并需要进行身份验证,请运行以下命令:

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

    {organization} 替换为 Azure DevOps 组织名称,并将 {repository} 替换为存储库的名称。