You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用服务主体生成PAT时Azure CI/CD管道报AADSTS9002313错误求助

解决Azure CI/CD中刷新令牌获取访问令牌报错AADSTS9002313的问题

核心问题排查与修复步骤

1. 修正OAuth请求的grant_type参数

你的代码当前使用的是authorization_code授权码流,但通过刷新令牌获取访问令牌时,必须切换为refresh_token流,这是最可能的错误原因:

# Azure token endpoint
$tokenUrl = "https://login.microsoftonline.com/$tenantID/oauth2/v2.0/token"

# 修正为刷新令牌流的请求体
$body = @{
    grant_type    = "refresh_token"  # 替换authorization_code为refresh_token
    client_id     = $clientId
    client_secret = $clientSecret
    scope         = "499b84ac-1321-427f-aa17-267ca6975798/.default offline_access"  # 用/.default替换%2f.default,避免编码歧义
    refresh_token = $refreshToken    # 替换$code为之前获取的刷新令牌变量
    redirect_uri  = $redirectUri
}

$headers = @{
    "Content-Type" = "application/x-www-form-urlencoded"
}

$response = Invoke-RestMethod -Method Post -Uri $tokenUrl -Headers $headers -Body $body

2. 验证CI/CD管道变量配置

  • 确保$clientSecret、$refreshToken等敏感变量以秘密变量形式存储在Azure管道中,避免明文传递导致的字符损坏或泄露。
  • 核对所有变量($tenantID、$clientId、$redirectUri)与本地测试环境完全一致,尤其是redirect_uri必须和授权码流中使用的完全匹配(包括大小写、路径)。

3. 检查刷新令牌有效性

  • 确认刷新令牌未过期(默认有效期90天,部分租户策略可能缩短),若过期需重新通过授权码流获取新的刷新令牌。
  • 检查服务主体状态:是否被禁用、权限是否被撤销,或租户是否启用了条件访问策略,限制CI/CD管道所在IP的访问。

4. 验证服务主体权限配置

  • 确认服务主体对Azure DevOps API(ID: 499b84ac-1321-427f-aa17-267ca6975798)授予的是应用权限而非委托权限,且已完成管理员同意(若权限需要)。
  • 确保请求的scope中包含offline_access,该范围是获取和使用刷新令牌的必要条件。

5. CI/CD环境调试建议

  • 在管道中添加脱敏后的日志输出,打印请求体的关键参数(如grant_type、scope),确认格式无错误。
  • 在CI/CD环境的网络下,用Postman等工具模拟刷新令牌请求,排查是否存在网络或防火墙限制。

内容的提问来源于stack exchange,提问作者DevOpsLearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:50:22