我一直在寻找用于将加密的连接信息存储在Appsettings.json中并使用ConfigProvider扩展对其解密的解决方案。我走这条路,因为我应该能够在所有生产应用程序上重用它。秘密和Azure Key保险库似乎不是我要找的东西,也没有使用的选择。
我暂时基于this
我的json文件看起来与此类似
{
"ConnectionStrings": {
"SerilogConnection": "encryptedConnection",
"OracleConnection": "encryptedConnection"
}
}
我很难弄清楚如何使用解密的密钥将json加载到此字典对象中,以及如何在配置生成器中将其返回...
private IDictionary<string, string> UnencryptMyConfiguration()
{
// how do parse json this and decrypt?
// var jObj = JObject.Parse(json);
// var innerJObj = JObject.FromObject(jObj["ConnectionStrings"]);
// use decryption method here?
var configValues = new Dictionary<string, string>
{
{"key1", "unencryptedValue1"},
{"key2", "unencryptedValue2"}
};
return configValues;
}
建筑商为此照顾我吗?
var configuration = new ConfigurationBuilder()
.AddJsonFile($"appsettings.{_currentEnv}.json", optional: true)
.AddJsonFile("appsettings.json")
.AddEncryptedProvider() // <-- here?
.AddEnvironmentVariables()
.Build();
这是我在另一个项目中使用的解密方法:
public string DecryptData(string data)
{
string path = @"c:\temp\PrivateKey.txt";
var privateKey = System.IO.File.ReadAllText(path);
var bytesCypherText = Convert.FromBase64String(data);
var csp = new RSACryptoServiceProvider();
var sr = new System.IO.StringReader(privateKey);
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
var privKey = (RSAParameters)xs.Deserialize(sr);
csp.ImportParameters(privKey);
var bytesPlainTextData = csp.Decrypt(bytesCypherText, false);
var plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
return plainTextData;
}
我看了很多资源,读了this一堆,但似乎并不是我真正想要的东西。任何指示或建议都欢迎,我走错了路吗?