用于 Webjob DashboardConnectionString 和 StorageConnectionString 的 Azure SAS 令牌

Azure SAS Token for Webjob DashboardConnectionString and StorageConnectionString

Azure Web 作业要我在启动时设置 AzureWebJobsDashboard 和 AzureWebJobsStorage 属性,但我不想在代码中公开 AccountKey。 当我尝试使用 SAS 令牌时,JobHostConfiguration class 试图解析 SAS 令牌并抛出异常

 var config = new JobHostConfiguration();
            config.DashboardConnectionString = ConfigurationManager.GetSetting(KeyVaultSecrets.StorageReadWriteConnectionString);
            config.StorageConnectionString = ConfigurationManager.GetSetting(KeyVaultSecrets.StorageReadWriteConnectionString);

异常

System.InvalidOperationException occurred HResult=0x80131509 Message=Failed to validate Microsoft Azure WebJobs SDK Dashboard connection string. The Microsoft Azure Storage account connection string is not formatted correctly. Please visit http://msdn.microsoft.com/en-us/library/windowsazure/ee758697.aspx for details about configuring Microsoft Azure Storage connection strings. Source= StackTrace: at Microsoft.Azure.WebJobs.Host.Executors.StorageAccountParser.ParseAccount(String connectionString, String connectionStringName, IServiceProvider services) at Microsoft.Azure.WebJobs.Host.Executors.DefaultStorageAccountProvider.set_DashboardConnectionString(String value)

有什么方法可以在为 JobHostConfiguration 创建配置时使用 SAS 令牌?

此处尚不支持 SAS 令牌。但是,您不需要将连接字符串放入您的代码中。 您应该将它们放在应用设置中 !像这样:

<configuration>
  <connectionStrings>
    <!-- The format of the connection string is "DefaultEndpointsProtocol=https;AccountName=NAME;AccountKey=KEY" -->
    <!-- For local execution, the value can be set either in this config file or through environment variables -->
    <add name="AzureWebJobsDashboard" connectionString="xxxxxxx" />
    <add name="AzureWebJobsStorage" connectionString="yyyyyyyyy" />
  </connectionStrings>

此外,您还可以直接在您的网站上设置您的应用设置。

也就是说,在最新的每晚构建中,我们现在支持 SAS 连接字符串上的 运行 [Timer] 和 [Singleton];您可以通过将 config.DashboardConnectionString 显式设置为 null 来禁用日志记录。但是我们还不支持将 [Blob] 和其他存储绑定到 SAS url。请参阅此提交中的单元测试:https://github.com/Azure/azure-webjobs-sdk/blob/bd2d9ea34f13fc16569e8d8f80bafdb605eeb6f9/test/Microsoft.Azure.WebJobs.Host.EndToEndTests/InternalStorageTests.cs

我们可以在连接字符串中使用SAS。由于 SAS 包含对请求进行身份验证所需的信息,因此带有 SAS 的连接字符串根据 that link

提供协议、服务端点和访问资源所需的凭据

这样StorageAccountParser.ParseAccount(String connectionString)可以解析连接字符串

BlobEndpoint=https://storagesample.blob.core.windows.net; SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D