我已使用以下代码库实现了Key Vault访问令牌生成器:
private async Task<string> GetStaticToken(string authority, string resource)
{
var authContext = new AuthenticationContext(authority);
var credential = new ClientCredential(_appSettings.ClientId, _appSettings.ClientSecret);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, credential);
return result.AccessToken;
}
我知道如何将此令牌用于Authorization标头并使用Rest API调用获取机密值。但是我们可以在下面的代码库中使用相同的AccessToken字符串:
var builder = new ConfigurationBuilder();
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault($"https://{myVaultName}.vault.azure.net/", keyVaultClient, new DefaultKeyVaultSecretManager());
Configuration = builder.Build();
在创建KeyVaultClient时,可以重用AccessToken字符串值吗?如下所示:
var tokenValue = GetStaticToken (authority, resource);
var keyVaultClient = new KeyVaultClient(tokenValue);
基本上,我想立即生成令牌并在任何地方重用字符串,甚至在我的应用程序范围之外。
注意:我知道令牌将带有有效期限。到那时,GetToken将再次被调用。
答案 0 :(得分:3)
好吧,您可以进行回调以返回该令牌:
var kvClient = new KeyVaultClient((authority, resource, scope) => Task.FromResult(tokenValue));
这只是将调用替换为使用已完成的任务(其中包含令牌)获取令牌。