c# - 在 c# 中从 Azure 中的 keyVault 获取机密
问题描述
我有以下代码,它从 KeyVault 检索秘密。
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SomeURI"]);
secretValue = sec.Value ;
获取令牌方法:
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
and 。ClientSecret
我觉得将这些值保留在 Appconfig 中并使用它们是不安全的。有没有办法可以从配置文件中删除并从其他任何地方获取。或者我的问题有什么好的解决方案。
任何回应都非常感谢!
PS:我的是用c#开发的windows服务
解决方案
有没有办法可以从配置文件中删除并从其他任何地方获取。或者我的问题有什么好的解决方案。
根据我的理解,您可以将相关信息存储到数据库中。您可以使用windows Authentication访问数据库以获取相关信息。
使用托管标识的另一种方法是通过Microsoft.Azure.Services.AppAuthentication。
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
这样就不需要存储相关信息了,但是需要先使用azure cli登录到azure再运行服务。该类AzureServiceTokenProvider
将令牌缓存在内存中。有关更多详细信息,请参阅对自定义服务进行身份验证。
推荐阅读
- config - 如何使用自己的快捷键在 tmux 中的窗口之间切换?
- python - 如何在 python 的一行中放置特定数量的整数?
- css - WordPress-CSS:在视频播放器上设置相等的高度
- flutter - 使用 FloatingButton (Flutter) 随机输出文本
- swift - 如何在 SwiftUI 中调整背景图像的大小而不影响屏幕视图?
- c# - HttpClient - 任务被取消异常
- dns - 域与子域与区域
- kubernetes - Kubernetes中微服务之间的相互通信
- c++ - gcc-8.2 中的异常编译器消息
- visual-studio - Visual Studio 2019 在文件中的快速查找 (Ctrl + F) 是否会在任何地方显示出现次数和索引?