在Azure管道中使用托管身份:GetUserAccessToken:无法获取身份的访问令牌。 AAD返回了静默故障

时间:2020-04-02 21:11:55

标签: azure azure-devops azure-pipelines azure-resource-manager azure-managed-identity

我正在尝试在Azure Pipelines中运行Azure Resource Group Deployment task。我已经部署了Azure Pipelines self-hosted agent on an Azure VM running Windows,并且在我的Azure DevOps组织中已经建立了Azure Resource Manager service connection to a VM with a managed service identity

但是,当尝试使用具有托管身份的服务连接来配置Azure资源组部署任务时,出现以下错误:

GetUserAccessToken:无法获取标识的访问令牌。 AAD返回了静默失败。

屏幕截图:

enter image description here

我已经确认我已向目标资源组授予对VM的托管身份的访问权限(提供者):

enter image description here

服务连接的范围也仅限于Azure订阅:

enter image description here

感谢您对诊断此问题的任何帮助。谢谢!

4 个答案:

答案 0 :(得分:2)

如果这对其他人有用,则在通过Azure DevOps修改服务连接时遇到类似的问题。查理·布朗(Charlie Brown)提供的解决方案为我指明了正确的方向:AAD中的用户不会自动添加到Azure DevOps企业应用程序中,因此,如果遇到此问题,可能意味着您需要添加尝试添加该用户或组的用户或组。通过DevOps访问它。

就我而言,我只是通过Azure门户-> Azure Active Directory->企业应用程序-> Azure DevOps添加了自己以及所有者和用户。

我不必创建其他用户,也无需使用MFA进行任何修改。

答案 1 :(得分:0)

问题似乎是由于已通过Azure DevOps身份验证的用户帐户而引起的,该用户帐户正在检索订阅信息。 Azure DevOps 不使用托管身份来检索订阅信息。

尤其是,我原来的Azure DevOps用户帐户已打开MFA以对Azure订阅进行身份验证(例如,portal.azure.com),但已打开MFA以对Azure DevOps进行身份验证(例如dev.azure.com/)。我认为这是导致无法获取访问令牌的问题:

enter image description here

我在Azure AD中创建了一个不同的用户帐户,向其授予我的Azure DevOps组织的访问权限,并确保此新用户帐户具有对目标订阅的读权限,并且未打开MFA 。这解决了使用托管身份时获取订阅信息的问题:

enter image description here

答案 2 :(得分:0)

我遇到此错误的情况是将服务连接添加到Azure DevOps中的管理组

GetUserAccessToken:无法获取身份访问令牌 {{GUID}}。 AAD返回了静默失败。

修复后,我将我的帐户添加为DevOps中的项目集合管理员...以下详细信息:

尝试所有可能的权限... GA,ROOT Mgmt组所有者(通过AAD设置),目标Mgmt组所有者,订阅所有者,应用程序管理员...在devops中,我是项目管理员,并且在服务中具有管理员安全性角色连接。

我在这里有一个有趣的区别,我的Azure AD家庭租户不同于我的Azure Subscription AD租户(我是B2B客户)。

我实际上试图使用一个具有与Azure订阅租户绑定的AAD的不同DevOps租户,并且它起作用了:(这使我进一步研究了不同之处。除了DevOps-> AAD链接之外,我还工作中的管理员,只有收集失败的管理员,我只有我拥有管理组所有者的权限,然后将我的帐户添加为项目收集管理员-已完成!

参考:https://developercommunity.visualstudio.com/solutions/1246044/view.html

答案 3 :(得分:-1)

会话过期后通常会发生获取访问令牌失败的情况。

要解决这些问题:

  1. 退出Azure Pipelines或TFS。
  2. 打开InPrivate或隐身浏览器窗口,然后导航至https://visualstudio.microsoft.com/team-services/
  3. 如果系统提示您退出,请这样做。
  4. 使用适当的凭据登录。
  5. 从列表中选择要使用的组织。
  6. 选择要向其中添加服务连接的项目。
  7. 通过打开“设置”页面来创建所需的服务连接。然后,选择服务>新建服务连接> Azure资源管理器。

参考:

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/azure-rm-endpoint?view=azure-devops#sessionexpired