通过 Visual Studio 部署资源时,Azure ExpiredAuthenticationToken 在 New-AzureRmResourceGroupDeployment 期间

Azure ExpiredAuthenticationToken during New-AzureRmResourceGroupDeployment when deploying resources via Visual Studio

我正在尝试通过 Visual Studio 使用 ARM 模板部署 HDInsight 集群。我在 Visual Studio 2015 年创建了一个 Azure 资源组项目,并将我的资源定义添加到模板 JSON 文件中。

然而,当我去部署它时(通过右键单击项目,选择 Deploy -> New Deployment,输入我的参数),Visual Studio 的输出显示(我剪掉了一些无聊的东西):

17:19:23 - Build started.

17:19:23 - Project "LaunchHdInsightCluster.deployproj" (StageArtifacts target(s)):

[snip]

17:20:27 - [VERBOSE] 17:20:27 - Resource Microsoft.HDInsight/clusters 'groupbhdinsight' provisioning status is running

17:31:06 - [ERROR] New-AzureRmResourceGroupDeployment : ExpiredAuthenticationToken: The access token expiry UTC time '3/14/2016 5:31:06 PM' is earlier than current UTC time '3/14/2016 5:31:07 PM'.

请注意,在访问令牌过期之前部署仅 运行 12 分钟 - 显然对于部署 HDInsight 群集来说这是一个问题(平均需要 20 分钟)。

我只是想了解这里的幕后情况,因为我找不到这方面的文档。即:

什么创建访问令牌以及如何创建?它持续多长时间?部署时我没有被要求提供任何 Azure 凭据 - 我假设这一定是我使用我在 Azure 中使用的相同帐户登录 Visual Studio 的事实,并且它 'borrows' 身份验证会话,但这只是一个猜测

什么决定了访问令牌的到期时间,以便我可以防止这种情况再次发生?

如何刷新我的身份验证令牌?

我不确定,但我相信 New-AzureRmResourceGroupDeployment 会上传您的模板文件并设置部署以在云中进行。然后它查询部署以查看它是否完成并在资源创建时输出它们。显然,当令牌过期时,这些查询会出错。但部署应该继续。

您可以忽略此错误并自行查询部署或资源组,以查看何时完成。

我敢打赌这是一个暂时性的问题。我重试部署(需要修改我的 ARM 模板),现在成功了。

请在门户中检查您的 Azure 资源组。您可能会准备好资源并 运行.

@Cleverguy25 解释了我认为部署过程是如何工作的。

这里发生的是 VS 中的 Azure 资源组部署使用项目中的 PowerShell 脚本进行部署(即使输出托管在 VS 中,我们使用那个 PS 脚本来完成工作). PowerShell 脚本通过使用 VS 登录中的令牌进行身份验证。该令牌仅在一个小时内有效,然后 VS 将刷新它。不过,一旦它被移交给 PowerShell,PowerShell 就不会自动刷新它。因此,如果您拥有 59 分钟的令牌,它会在您开始部署后很快过期。令牌可以持续一个小时,或更短的时间。我们正在努力解决这个问题(即让 PowerShell 自动刷新令牌),但这还需要一个月左右的时间。参见:https://github.com/Azure/azure-powershell/issues/1068

解决方法:不幸的是,VS 没有很好的解决方法。但是...

希望对您有所帮助...

我遵循此 post,只需执行 'Clear-AzureRmContext' 此命令,然后使用 'connect-AzAccount' 重新连接到 Azure,问题已解决。

https://github.com/Azure/azure-powershell/issues/6585

打开一个新的 powershell 并使用 Clear-AzureRmContext 获取用于验证 Azure 资源管理器请求的当前元数据。

这对我来说很神奇。