如何在不要求登录的情况下在 Powershell 中使用服务主体身份验证(不记名令牌)进行 DevOps?

问题描述 投票:0回答:1

我正在尝试使用 Powershell 使用服务主体身份验证(不记名令牌)在 DevOps 中创建错误。使用我的个人访问令牌我可以做到。使用 Bearer 令牌要求我登录。如何在不要求登录的情况下使用 Bearer 令牌?我需要整个过程自动化,无需交互即可登录。

我通过这种方式成功获得了 Bearer 令牌:

$AppID    = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$Secret   = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$TenantID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$Resource = "https://management.azure.com/"
$TokenUri = "https://login.microsoftonline.com/$TenantID/oauth2/token/"
$Body     = "client_id=$AppId&client_secret=$Secret&resource=$Resource&grant_type=client_credentials"

$TokenResult = Invoke-RestMethod -Uri $TokenUri -Body $Body -Method "POST"
$AccesToken = $TokenResult.access_token

我是否缺少 Azure Active Directory 设置中的设置?也许在身份验证部分或 API 权限中有什么?谢谢!

powershell azure-devops azure-devops-rest-api
1个回答
2
投票

2023 年 4 月 11 日更新:

目前我们可以使用 Azure Active Directory 服务主体和托管身份 进行身份验证。


原答案:

是的,如doc中所述,

Azure DevOps API 不支持通过服务主体进行非交互式服务访问。

这意味着您无法Azure AD 客户端凭据流 获取令牌来调用 DevOps API(您提供的脚本使用此流),因为 Azure DevOps 中没有服务主体的访问控制。支持的是用户参与的方式,例如授权代码流程.

在这种情况下,如果您想使用非交互方式通过 powershell 调用 DevOps REST API,有两种解决方法。

  1. 在powershell中使用Azure AD ROPC流程不推荐,因为我们需要在请求中暴露用户名和密码,这是不安全的,并且不适用于启用了MFA的帐户。

  2. 使用PAT,只需对令牌进行base64编码,然后使用

    Invoke-RestMethod
    调用REST API,这是推荐的方式。

© www.soinside.com 2019 - 2024. All rights reserved.