Azure DevOps PAT 身份验证问题 - 403/203 错误

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

我正在与 Azure DevOps 合作,并在多个组织中使用全局完整个人访问令牌 (PAT)。此 PAT 集成到多个 Azure 托管工作流中以执行各种 API 请求。

问题:我注意到,如果我在一段时间内(有时短至一天)没有通过浏览器登录关联帐户,当工作流尝试在以下平台上执行 API 请求时,我会开始收到 403 或 203 错误Azure 开发运营。有趣的是,一旦我通过浏览器登录帐户,工作流程就会恢复正常运行,没有任何错误。

我的尝试:到目前为止,我一直通过浏览器手动登录帐户来解决问题,但这不是一个可持续的解决方案。

预期结果:我正在寻找一种方法来防止这些错误发生,即使我长时间不通过浏览器登录帐户也是如此。

任何见解或建议将不胜感激。谢谢!

azure-devops azure-devops-rest-api
1个回答
0
投票

对于 Microsoft Entra ID 支持的组织,您有 90 天的时间使用新 PAT 登录,否则将被视为不活动。此外,您可以检查您的 Microsoft Entra ID 中是否启用了登录频率策略

除了使用 PAT 之外,您还可以使用服务主体通过 Microsoft Entra 令牌调用 REST API。您不需要像 PAT 那样轮换它,后者必须每隔一段时间(至少 180 天)费力地轮换一次。此外,Microsoft Entra 令牌每小时都会过期,必须使用刷新令牌重新生成以获得新的访问令牌,这限制了泄露时的总体风险因素。

  1. 在 Azure 门户中创建应用程序服务主体。
  2. 将服务主体添加到您的每个组织,并为其分配许可证和特定权限。
  3. 获取服务主体的访问令牌并使用此令牌访问 Azure DevOps 资源。有一个 PowerShell 示例供您参考。
$tenantId = '{Tenant ID}'
$clientId = '{Application (client) ID of your service principle} '
$clientSecret = '{The secret value of your service principle}'
$scope = "499b84ac-1321-427f-aa17-267ca6975798/.default"

#Format web request body
$body = @{
    'grant_type' = 'client_credentials'
    'client_id' = $clientId
    'client_secret' = $clientSecret
    'scope' = $scope
}

#Send request for OAuth authentication to receive token
$Response = Invoke-RestMethod https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token -ContentType 'application/x-www-form-urlencoded' -Method POST -Body $body

# Format Auth token into useable header
$accessHeader = @{
    'Authorization' = 'Bearer ' + $Response.access_token
    'Accept' = "application/json"
}

# Test connection/get project
$requestUrl = "https://dev.azure.com/{Orgname}/_apis/projects/{Projectname}?api-version=7.1-preview.4"
Invoke-RestMethod -uri $requestUrl -Method GET -Headers $accessHeader

请参阅有关使用服务主体进行身份验证的详细信息:使用服务主体和托管身份

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