我正在构建一个Angular 6应用程序,它将能够在Azure Blob存储上进行CRUD操作。但是,我在使用邮递员来测试请求之前,先在应用程序内部实现请求,然后将从Angular获得的令牌复制粘贴到该资源中。
当尝试读取存储在存储中的文件以进行测试时,我得到:<Code>AuthorizationPermissionMismatch</Code>
<Message>This request is not authorized to perform this operation using this permission.
2018-03-28
,因为这是我能找到的最新版本,并且我刚刚创建了存储帐户。答案 0 :(得分:4)
我发现不足以将该应用程序和帐户添加为所有者,我要进入您的存储帐户> IAM>添加角色并为此类型的请求添加特殊权限,STORAGE BLOB DATA CONTRIBUTOR(PREVIEW)< / p>
答案 1 :(得分:2)
确保在命令末尾添加/Y
。
答案 2 :(得分:1)
请注意,如果您想在订阅范围内应用“ STORAGE BLOB DATA XXXX”角色,则在您的订阅具有Azure DataBricks命名空间的情况下,它将不起作用:
如果您的订阅包含Azure DataBricks命名空间,则将阻止在订阅范围内分配的角色授予对blob和队列数据的访问权限。
答案 3 :(得分:1)
使用以下内容使用Azure AD连接到Blob存储: 这是使用SDK V11的代码,因为V12仍然存在多个AD帐户的问题 看到这个问题 https://github.com/Azure/azure-sdk-for-net/issues/8658 要进一步阅读V12和V11 SDK
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet-legacy
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.Storage.Auth;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.Queue;
[Fact]
public async Task TestStreamToContainer()
{
try
{
var accountName = "YourStorageAccountName";
var containerName = "YourContainerName";
var blobName = "File1";
var provider = new AzureServiceTokenProvider();
var token = await provider.GetAccessTokenAsync($"https://{accountName}.blob.core.windows.net");
var tokenCredential = new TokenCredential(token);
var storageCredentials = new StorageCredentials(tokenCredential);
string containerEndpoint = $"https://{accountName}.blob.core.windows.net";
var blobClient = new CloudBlobClient(new Uri(containerEndpoint), storageCredentials);
var containerClient = blobClient.GetContainerReference(containerName);
var cloudBlob = containerClient.GetBlockBlobReference(blobName);
string blobContents = "This is a block blob contents.";
byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);
using (MemoryStream stream = new MemoryStream(byteArray))
{
await cloudBlob.UploadFromStreamAsync(stream);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
答案 4 :(得分:0)
我已经通过将GetAccessTokenAsync方法中请求的资源从“ https://storage.azure.com”更改为我的存储Blob的URL来解决此问题,如以下代码片段:
public async Task<StorageCredentials> CreateStorageCredentialsAsync()
{
var provider = new AzureServiceTokenProvider();
var token = await provider.GetAccessTokenAsync(AzureStorageContainerUrl);
var tokenCredential = new TokenCredential(token);
var storageCredentials = new StorageCredentials(tokenCredential);
return storageCredentials;
}
其中AzureStorageContainerUrl设置为https://xxxxxxxxx.blob.core.windows.net/
答案 5 :(得分:0)
确保使用 Storage Blob Data Contributor 而不是 Storage Account Contributor,后者仅用于管理实际的存储帐户而不是其中的数据。