如果我将 ClientId 和客户端 key 存储在 Web/应用程序配置中,我无法理解 Azure Key Vault 有什么好处。传递基本 URI 或完整 URL 以获取值。
我没有保护应用程序,而是绕过直接读取的内容。但是,如果任何人都可以从 Web 配置中读取值,那么任何人都可以从 Key Vault 中读取值。
只需从 Web 配置中复制 ClientId 和 ClientSecret,将值粘贴到控制台应用程序中,然后只需传递 URI 即可获取值。
我正在虚拟机 (IIS) 中运行我的 Web API(c#)。我需要在 Web 配置中不提供任何值的情况下实现 KeyVault。
最佳答案
从架构上来说,Azure Key Vault 提供了存储应用程序配置设置的简单方法。正如您可能在示例文档中看到的那样,为了访问 key 保管库,我们将客户端 ID 和客户端 key 存储在 web.config 中,这不符合安全设计:
您可以执行以下操作:
- 您所需的所有设置都需要在 blob/任何类型的存储中采用加密格式,并且只有您的应用程序应该能够在应用程序启动时从 blob 或任何类型的存储中获取配置。 一旦应用程序正确启动,最后一步应该是解密设置并以安全的方式存储在客户端。
这样就不需要公开应用程序的客户端 ID 和 secret 。
此外,我们在 Azure AD 中创建一个服务主体帐户,并提供从 Key Vault 读取数据的访问权限。稍后,我们在调用 Azure AD 身份验证 API 后存储不记名 token ,并使用此 token 访问 key 保管库。
- 另一种方法是
**托管身份**
,正如@JackJia指出的那样,托管身份将被视为受信任的资源,并且可以从特定端点获取 token ,而无需任何额外的配置。具体您可以阅读上面的回答。
如果您想进一步讨论,请告诉我,我们很乐意为您提供帮助。
关于c# - 如何从Azure Key Vault读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872882/