在没有用户 DevOps PAT 的情况下向 Azure DevOps 进行身份验证

Authenticate to Azure DevOps without user's DevOps PAT

目前我们使用一种方法来达到 DevOps 并通过利用用户的 DevOps PAT 从特定的 VM1 触发“发布管道”。我们 运行 在 VM1 上执行以下 PowerShell 命令:

$userPatToken = "xxxdfdgklfdgofkglfg4565gfhgfhgfh4gf54h54545fhfghfdffg"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $userPatToken)))

$url = "https://vsrm.dev.azure.com/MyOrg/MyProject/_apis/release/releases?definitionId=7&$top=100&api-version=6.0"
Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json" -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) }

用户是 AAD 用户,有没有办法使用它,比如说 AAD 凭据并向 DevOps 进行身份验证并执行相同的操作? 或者是否有一种方法可以使用 VM 系统管理(或任何用户管理)的身份来验证 DevOps 并触发发布管道?我们不想依赖于用户的 PAT。 应该是用PowerShell写的。

如果你不想使用PAT,你可以安装Az powershell模块,通过Connect-AzAccount.[=16使用在你的devops org中有权限的用户帐户登录=]

然后,您可以通过以下命令获取令牌。请注意不要更改脚本中的 499b84ac-1321-427f-aa17-267ca6975798,它是 DevOps REST API.

的 well-known 资源 ID
$token = (Get-AzAccessToken -ResourceUrl "499b84ac-1321-427f-aa17-267ca6975798").Token

然后,您可以将令牌传递给您的 powershell 脚本。您可以找到更多 details/sample 脚本 here.

编辑:

添加用户名和密码自动化脚本示例:

Install-Module -Name Az -Confirm:$False -Force -AllowClobber
Import-Module Az
$username = "useremail"
$password = "password"
$SecurePassword = ConvertTo-SecureString "$password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential($username, $SecurePassword)
Connect-AzAccount -Credential $credentials -TenantId yourTenantID

$token = (Get-AzAccessToken -ResourceUrl "499b84ac-1321-427f-aa17-267ca6975798").Token

$URL = 'https://dev.azure.com/{orgname}/{Projectname}/_apis/pipelines/{pipelineID}/runs?api-version=6.0-preview.1'
$header = @{
    'Authorization' = 'Bearer ' + $token
    'Content-Type' = 'application/json'
}
$body = @"
  {
    "resources": {
        "repositories": {
            "self": {
                "refName": "refs/heads/master"
            }
        }
    }
  }
"@

Invoke-RestMethod -Method Post -Uri $URL -Headers $header -Body $body