将Azure Devops PAT API与服务主体一起使用

gijlo24d  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(213)

我正在尝试自动更新Azure devops上的补丁到期日期。
我在上遵循MS指南
https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/manage-personal-access-tokens-via-api?view=azure-devops
这可以正常工作,但需要用户手动登录
所以我尝试用powershell 7连接AzAccount命令代替:

$azureAplicationId = "[app_id]"
$azureTenantId = "[tenant_id]"
$azurePass = ConvertTo-SecureString "[app_secret]" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId,$azurePass)

Connect-AzAccount -Credential $psCred -Tenant $azureTenantId -ServicePrincipal

然后

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

我确实得到了不记名令牌,但当我对 Postman 使用它时:

我认为这与Azure上的用户模拟权限似乎只能作为委托权限而不是应用程序权限这一事实有关:

想法?

ulydmbyx

ulydmbyx1#

根据您的情况和您在“401”回复上的错误信息,我这边测试了一下,按照您分享的文档测试,这个用户登录过程是无法绕过的,最后还是要先用您的用户账号登录。

因此,建议您先使用powershell 7 Connect-AzAccount命令直接登录。
下面是Postman中更新PAT的获取令牌脚本示例,您可以检查您的Body以查看它们是否都正确。
1.首先,您应该使用在您的DevOps组织(所有者或PCA)中拥有权限的用户帐户登录,并使用命令Connect-AzAccount和命令(Get-AzAccessToken -ResourceUrl "499b84ac-1321-427f-aa17-267ca6975798").Token获取不记名令牌。

2.然后,您可以通过文档'GET'列出所需的主体,如“authorizationId”:https://learn.microsoft.com/en-us/rest/api/azure/devops/tokens/pats/list?view=azure-devops-rest-7.0&tabs=HTTP

3.之后,'PUT'实现了PAT令牌与“Body”的修改如下:

{
    "displayName": "1111",
    "validTo": "2022-11-25T08:08:17.8166667Z",
    "scope": "app_token",
    "targetAccounts": [
        "782xxxxxxxxxxxxxxxxxxxxx0ecca5"
    ],
    "validFrom": "2022-12-25T08:08:28.3266667Z",
    "authorizationId": "5xxxxxxxxxxxxxxxxxxxxx50e",
    "token": null
}

更新PAT响应将如下图所示:

相关问题