我正在与 Azure DevOps 合作,并在多个组织中使用全局完整个人访问令牌 (PAT)。此 PAT 集成到多个 Azure 托管工作流中以执行各种 API 请求。
问题:我注意到,如果我在一段时间内(有时短至一天)没有通过浏览器登录关联帐户,当工作流尝试在以下平台上执行 API 请求时,我会开始收到 403 或 203 错误Azure 开发运营。有趣的是,一旦我通过浏览器登录帐户,工作流程就会恢复正常运行,没有任何错误。
我的尝试:到目前为止,我一直通过浏览器手动登录帐户来解决问题,但这不是一个可持续的解决方案。
预期结果:我正在寻找一种方法来防止这些错误发生,即使我长时间不通过浏览器登录帐户也是如此。
任何见解或建议将不胜感激。谢谢!
对于 Microsoft Entra ID 支持的组织,您有 90 天的时间使用新 PAT 登录,否则将被视为不活动。此外,您可以检查您的 Microsoft Entra ID 中是否启用了登录频率策略。
除了使用 PAT 之外,您还可以使用服务主体通过 Microsoft Entra 令牌调用 REST API。您不需要像 PAT 那样轮换它,后者必须每隔一段时间(至少 180 天)费力地轮换一次。此外,Microsoft Entra 令牌每小时都会过期,必须使用刷新令牌重新生成以获得新的访问令牌,这限制了泄露时的总体风险因素。
$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
请参阅有关使用服务主体进行身份验证的详细信息:使用服务主体和托管身份。