具有托管身份的WebJobs存储

时间:2019-03-19 12:31:42

标签: azure-webjobs azure-webjobssdk

默认情况下,WebJobs要求使用AzureWebJobsStorage连接字符串指定Azure存储帐户。

但是我已经可以使用托管身份访问我的存储了:

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
StorageCredentials storageCredentials = new StorageCredentials(new TokenCredential(accessToken));
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, "mystorageaccount", "core.windows.net", true);

我可以将WebJobs配置为使用此cloudStorageAccount代替AzureWebJobsStorage连接字符串吗?

1 个答案:

答案 0 :(得分:0)

  

我可以将WebJobs配置为使用此cloudStorageAccount代替AzureWebJobsStorage连接字符串吗?

是的,您可以使用cloudStorageAccount获取Blob帐户并对Blob进行一些操作。但是,使用Webjob时仍需要提供AzureWebJobsDashboardAzureWebJobsStorage。因为它们不仅是连接字符串,而且还是日志路径。

在测试中,我通过AzureWebJobsStorage连接设置了storage1的值,并在代码中获得了storage2帐户,并且可以正常工作。

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/").Result;
StorageCredentials storageCredentials = new StorageCredentials(new TokenCredential(accessToken));
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, "storage2", "core.windows.net", true);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("mycontainer");
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("hello.txt");
cloudBlockBlob.UploadTextAsync("aaaaaaaa").Wait();

有关分配角色和获取访问令牌的更多详细信息,您可以参考此article