从c#中获取来自Azure的keyVault的秘密

我有以下代码,它从KeyVault检索秘密。

var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken)); var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SomeURI"]); secretValue = sec.Value ; 

GetToken方法:

 async Task GetToken(string authority, string resource, string scope) { var authContext = new AuthenticationContext(authority); ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientId"],ConfigurationManager.AppSettings["ClientSecret"]); AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred); if (result == null) throw new InvalidOperationException("Failed to obtain the token"); return result.AccessToken; } 

在GetToken方法中,我从Appconfig中获取ClientIdClientSecret

我觉得在Appconfig中保留这些值并使用它们是不安全的。 有没有办法可以从配置文件中删除并从其他任何地方获取。 或者我的问题是否有任何可能的解决方案。

任何回复都非常感谢!

PS:我的是用c#开发的windows服务

有没有办法可以从配置文件中删除并从其他任何地方获取。 或者我的问题是否有任何可能的解决方案。

根据我的理解,您可以将相关信息存储到数据库中。 您可以使用Windows身份validation访问数据库以获取相关信息。

使用托管标识的另一种方法是通过Microsoft.Azure.Services.AppAuthentication 。

 var azureServiceTokenProvider = new AzureServiceTokenProvider(); var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback( azureServiceTokenProvider.KeyVaultTokenCallback)); 

这样您就不需要存储相关信息,但是在运行服务之前,您需要先使用azure cli登录到azure。 AzureServiceTokenProvider类将令牌缓存在内存中。 有关更多详细信息,请参阅对自定义服务的身份validation 。