我有以下代码,该代码可从KeyVault检索秘密。
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SomeURI"]);
secretValue = sec.Value ;
GetToken方法:
async Task<string> 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中获取ClientId
和ClientSecret
。
我觉得将这些值保留在Appconfig中并使用它们并不安全。有没有一种方法可以从配置文件中删除并从其他任何地方获取。或者有没有可能解决我的问题的好方法。
任何回应都非常感谢!
PS:Mine是用C#开发的Windows服务
答案 0 :(得分:1)
有没有一种方法可以从配置文件中删除并从其他任何地方获取。或者有没有可能解决我的问题?
根据我的理解,您可以将相关信息存储到数据库中。然后,您可以使用windows Authentication访问数据库以获取相关信息。
使用托管身份的另一种方法是通过Microsoft.Azure.Services.AppAuthentication。
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
通过这种方式,您无需存储相关信息,但是在运行服务之前,需要先使用azure cli登录到azure。 AzureServiceTokenProvider
类将令牌缓存在内存中。有关更多详细信息,请参阅authenticate to custom services。