登录
首页 >  Golang >  Go问答

TokenCredential在Azure Blob Go库中的使用导致blob api调用时出错

来源:stackoverflow

时间:2024-03-10 09:51:25 198浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《TokenCredential在Azure Blob Go库中的使用导致blob api调用时出错》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试使用 azblob go libary 来使用服务主体访问 blob 存储,我发现了一个 api: https://godoc.org/github.com/azure/azure-storage-blob-go/azblob#newtokencredential 似乎它可以从 adal lib 中获取 oauthtoken,但我总是收到此错误:authorizationpermissionmismatch

oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, tenantID)
spt, err := adal.NewServicePrincipalToken(*oauthConfig, clientID, clientSecret, "https://storage.azure.com/")    
creds := azblob.NewTokenCredential(spt.OAuthToken(), nil)
blobPipeline := azblob.NewPipeline(creds, azblob.PipelineOptions{})
url := azblob.NewContainerURL(*URL, blobPipeline)
_, err := url.ListBlobsHierarchySegment(...)

如果我用 sharedkeytoken 替换 newtokencredential,那么代码可以正常运行,但我们不能在我们的环境中使用 sharedkeytoken。


解决方案


好消息是身份验证似乎已成功进行,因此您对 ADAL 库的使用似乎没问题。

最可能的原因是,您用于向 Azure Active Directory 进行身份验证的主体没有访问存储帐户中的 blob 所需的权限。

您需要登录 Azure 门户,找到并选择相关存储帐户,然后:

  1. 选择访问控制 (IAM)
  2. 转到角色分配
  3. 点击添加按钮
  4. 角色向下滚动到存储 Blob...,然后选择一个存储 Blob 角色来满足您的要求
  5. 选择文本框中,输入您要通过 ADAL 获取其令牌的委托人姓名的一部分
  6. 点击保存按钮

完成后,尝试再次运行您的应用。令牌可能需要刷新,因此请确保重新运行您的身份验证和令牌检索代码。

我最终为 Azure 创建了一个服务请求票证,他们在此处提供了示例代码,以便使用 golang 通过 Azure 进行身份验证: https://github.com/google/go-cloud/blob/master/blob/azureblob/example_test.go#L111

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>