如何从Azure KeyVault中获取SecureString-C#

如何从Azure KeyVault中获取SecureString-C#,c#,.net-core,azure-keyvault,C#,.net Core,Azure Keyvault,我有一个Azure KeyVault,它提供了一个我想读入SecureString的密码 如果我尝试从IConfiguration对象中将字符串作为SecureString读取,它将返回null: config.GetValue<SecureString>("AdminPW") == null config.GetValue(“AdminPW”)==null 我可以将字符串作为字符串读入并转换为SecureString,但这似乎是一个肮脏的攻击: var pass = new

我有一个Azure KeyVault,它提供了一个我想读入SecureString的密码

如果我尝试从IConfiguration对象中将字符串作为SecureString读取,它将返回null:

config.GetValue<SecureString>("AdminPW") == null
config.GetValue(“AdminPW”)==null
我可以将字符串作为字符串读入并转换为SecureString,但这似乎是一个肮脏的攻击:

 var pass = new SecureString();
 foreach (var c in config.GetValue<string>("AdminPW").ToCharArray())
 {
    pass.AppendChar(c);
 }
var pass=new SecureString();
foreach(config.GetValue(“AdminPW”).ToCharArray()中的var c)
{
通过.附件(c);
}

有没有办法直接从IConfiguration获取SecureString?

正如Hans所说,这不是安全性

如果您正在使用的程序集不具有对
SecureString
序列化的本机支持,则正是在这种情况下,作为机密服务的密钥保管库只需向它们传递一个加密的有效负载,当您解密时,该有效负载会立即保存在SecureString中(CryptoStream逐字节转换为SecureString,然后是dispose以清除内存中的缓冲区)

因此,不建议您从Azure KeyVault中获取SecureString


您可以参考此问题。

对于其他检查此问题的人,无法直接从Azure KeyVault中获取SecureString。

从config.GetValue()中获取的字符串毫无意义已经泄露了秘密。SecureString很久以前就变得毫无意义了。专注于物理安全、带锁的门和废弃旧硬件的可靠回收过程。看看这个问题:你需要使用InteropServices。Marshal classI知道它不安全,我只是将它用于Authenticate的PSCredential对象我只想把它作为安全字符串从KeyVault中取出,以避免中间步骤。你不能将KeyVault作为安全字符串。