目前我正在尝试使用GoLang代码创建虚拟网络:
client := network.NewVirtualNetworksClient(subscriptionID)
var parameters network.VirtualNetwork
c := make(<-chan struct{})
c1, err := client.CreateOrUpdate(resourceGroupName, virtualNetworkName, parameters, c)
utils.Info.Println(err.Error())
utils.Info.Println(c1)
但代码运行不正常。它抛出以下异常:
发送请求失败:StatusCode = 401 - 原始错误:长时间运行操作因状态“失败”而终止:代码=“AuthenticationFailed”消息=“验证失败。'授权'标头丢失。”
我们非常感谢您的帮助。
答案 0 :(得分:1)
我假设您使用GoLang SDK for Azure?出错的原因是,当您发出请求时,它没有Authorization标头。授权标头是您可以从Azure Active Directory
获取的JSON Web标记1)查看Fiddler中的请求,看看您的请求是否已对齐with the rules。
答案 1 :(得分:1)
有一些很好的文档可以使用Azure身份验证,您可以在此处找到:azure-sdk-for-node/Documentation/Authentication
虽然目前还没有针对虚拟网络的示例,但您可以找到Azure SDK for Go samples here。
对于Go,您可以更新客户端以使用身份验证令牌,因此您的代码将如下所示:
c := make(chan struct{})
authConfig, err0 := azure.PublicCloud.OAuthConfigForTenant(<yourTenantID>)
token, err1 := azure.NewServicePrincipalToken(
*authConfig,
<yourClientID>,
<yourClientSecret>,
azure.PublicCloud.ResourceManagerEndpoint)
client := network.NewVirtualNetworkClient(subscriptionID)
client.Authorizer = token
var parameters network.VirtualNetwork
c1, err2 := client.CreateOrUpdate(resourceGroupName, virtualNetworkName, parameters, c)