【问题标题】:Store Azure Key Vault clientSecret securely安全地存储 Azure Key Vault clientSecret
【发布时间】:2021-12-17 04:22:37
【问题描述】:

我正在开发一个 C# 桌面应用程序(一个用于 3D 建模软件的插件),因此我需要从 GraphQL 端点访问信息。为了访问端点,我需要提供一个密钥。所以我所做的就是将该密钥存储在 Azure Key Vault 上。
这是我用来从 Azure Key Vault 获取密钥的代码:

var clientProd = new SecretClient(new Uri("my-azure-keyvault-url"),
  new ClientSecretCredential(
    "tenantId",
    "clientId",
    "clientSecret"));

Response<KeyVaultSecret> secret = await clientProd.GetSecretAsync("cbe-graphQL-prod");

但现在我发现自己陷入了这种恶性循环,我不确定那个 clientSecret 应该来自哪里,所以它没有被推送到版本控制。
我打算将这个应用程序部署到我公司的多个用户,所以我不想在每个人的机器上创建一个环境变量(甚至没有组策略)。

最好的方法是什么?

谢谢!

【问题讨论】:

  • 您是在询问最初在哪里找到桌面应用程序的客户端密码,还是想知道从 keyVault 传递该密码(如果它存储在那里)?
  • 我想存储(超出代码和/或版本控制)我需要访问 Azure Key Vault 的“clientSecret”字符串

标签: c# azure-keyvault


【解决方案1】:

如果您在 Azure 中托管应用程序,则可以使用 系统分配的托管标识 访问密钥保管库,无需任何凭据(客户端 ID、客户端密码)

如果您的应用程序托管在本地,您可以限制应用程序注册(服务主体)对存储机密的密钥库的访问。

然后您可以将客户端密码存储为环境变量或硬编码客户端密码

【讨论】:

  • 感谢您的回复,但我的应用程序实际上并没有存储在任何地方,因为它是桌面应用程序,而不是网络...
  • 您可以将客户端密码存储在单独的文件中,并在您的情况下使用 gitignore
  • 如果你这样做,秘密会被编译到 dll 中吗?因为我想到了这一点,但后来我也想到,当我将应用程序部署给我的同事时,他们将无法查询数据库,因为秘密不在他们的机器上......
  • 您可以为您的密钥保管库使用 Azure AD 身份验证:devblogs.microsoft.com/dotnet/…
猜你喜欢
  • 2017-09-12
  • 2017-04-07
  • 2020-02-24
  • 2016-01-21
  • 2017-01-19
  • 2021-03-20
  • 2021-01-18
  • 2015-11-26
  • 1970-01-01
相关资源
最近更新 更多