默认情况下,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连接字符串吗?
我可以将WebJobs配置为使用此cloudStorageAccount而不是AzureWebJobsStorage连接字符串吗?
是的,你可以使用cloudStorageAccount
获取blob帐户并对blob进行一些操作。但是,当您使用Webjob时,仍需要提供AzureWebJobsDashboard
和AzureWebJobsStorage
。因为它们不仅是连接字符串,它们也是日志路径。
在我的测试中,我用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。