Azure Blob Go lib使用TokenCredential访问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(...)

如果我将 NewTokenCredential 与 SharedKeyToken 进行交换,那么代码可以正常运行,但我们不能在我们的环境中使用 SharedKeyToken。


紫衣仙女
浏览 97回答 1
1回答

尚方宝剑之说

好消息是,身份验证似乎已成功进行,因此您对 ADAL 库的使用似乎没问题。出现此问题的最可能原因是,用于向 Azure Active Directory 进行身份验证的主体没有访问存储帐户中的 blob 所需的权限。您需要登录 Azure 门户,找到并选择相关存储帐户,然后:选择访问控制 (IAM)转到角色分配单击添加按钮从“角色”向下滚动到“存储 Blob...”,然后选择一种存储 Blob 角色来满足您的要求在“选择”文本框中,输入您要通过 ADAL 获取其令牌的主体名称的一部分单击“保存”按钮完成后,尝试再次运行您的应用程序。令牌可能需要刷新,因此请确保重新运行您的身份验证和令牌检索代码。

慕码人8056858

我最终为 Azure 创建了一个服务请求票证,他们在此处回复了示例代码,以便使用 golang 对 Azure 进行身份验证:https: //github.com/google/go-cloud/blob/master/blob/azureblob/example_test。去#L111
打开App,查看更多内容
随时随地看视频慕课网APP