正如标题所示,仅当我在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 ...