Azure Blob Go lib使用TokenCredential访问blob api总是返回错误

标签 azure go azure-active-directory azure-blob-storage

我正在尝试使用 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 获取其 token 的委托(delegate)人姓名的一部分
  6. 点击保存按钮

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

关于Azure Blob Go lib使用TokenCredential访问blob api总是返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495087/

相关文章:

azure - 在 Azure 中,我可以操作 Web 作业部署到的 Web 应用程序上的文件吗?

caching - 估计并发 Azure Appfabric 缓存连接

azure - 由于 login.microsoftonline.com 身份验证,应用程序代理在 Teams 桌面任务模块中不起作用

Go SMB2 ,阅读和列出目录

go - 如何从对象中删除属性

azure - 如何使用托管标识从 Azure Kubernetes 服务 (AKS) 访问 Azure Key Vault (AKV)

go - 如何优雅地处理 Web 服务中的错误

powershell - 如何将 Microsoft 帐户添加到 Azure Active Directory?

azure-active-directory - "System Assigned"身份和应用注册的区别 "Service Principal"

azure - Azure函数是否可以监听多个blob以进行blob触发器