如何使用现有的access_token字符串创建KeyVaultClient实例?

时间:2018-08-02 09:44:17

标签: azure asp.net-core asp.net-core-webapi azure-keyvault

我已使用以下代码库实现了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将再次被调用。

1 个答案:

答案 0 :(得分:3)

好吧,您可以进行回调以返回该令牌:

var kvClient = new KeyVaultClient((authority, resource, scope) => Task.FromResult(tokenValue));

这只是将调用替换为使用已完成的任务(其中包含令牌)获取令牌。