VSTS将密钥保管库机密传递给IConfigurationBuilder.AddAzureKeyVault方法仅在未加密时有效

时间:2020-03-04 23:58:47

标签: c# .net-core azure-devops environment-variables azure-pipelines

正如标题所示,仅当我在VSTS变量部分中以纯文本格式放置clientId和clientSecret时,在下面的AddAzureKeyVault方法中填充的clientId和clientSecret的值才起作用。如果我使用从密钥库中提取这些值的变量组,或者在正常的“变量”部分中将这些值设置为机密,则此方法无效。它说如果这些值不是纯文本的,则为空。

var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
            .AddEnvironmentVariables();

        var configuration = builder.Build();

        var azureServiceTokenProvider = new AzureServiceTokenProvider($"RunAs=App;AppId={Environment.GetEnvironmentVariable("clientId")};TenantId={Environment.GetEnvironmentVariable("tenantId")};AppKey={Environment.GetEnvironmentVariable("clientSecret")}");
        KeyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

        builder.AddAzureKeyVault(Environment.GetEnvironmentVariable("keyVaultUri"),
            Environment.GetEnvironmentVariable("clientId"),
            Environment.GetEnvironmentVariable("clientSecret"),
            new DefaultKeyVaultSecretManager());

这是不安全的,因为我不希望纯文本格式的clientId和clientSecret值。这里有帮助吗?

编辑:我在.NET Core VSTS任务(dotnet运行)中使用以上代码。我也没有在任务中传递任何参数。我应该是吗?

编辑2:我可能已经找到了自己的答案here。但这是否意味着我需要让我的Main方法期望传递参数?像.NET Core VSTS任务的“参数”部分中的clientId和clientSecret一样?

编辑3:我尝试在.NET Core VSTS任务的“参数”部分中进行##[debug]arguments=##vso[task.setvariable variable=clientId]$(clientId) ##vso[task.setvariable variable=clientSecret]$(clientSecret)-clientId $(clientId) -clientSecret $(clientSecret)的操作,但仍将clientId和clientSecret解析为null ...

0 个答案:

没有答案