c# - 如何在 Asp.Core 应用程序中实现 AlwaysEncrypted AzureKeyVaultProvider 3.0.0
问题描述
我在 C# ASp.Core 3.0 中有一个 Web 应用程序,在 Azure 中有一个数据库,代码首先使用 EntityCore。我需要加密其中的一些敏感数据。我设法为我的应用程序和数据库实现了一个始终加密的 Azure Key Vault 系统,但仅使用 1.1.1 Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider。
我想实施 3.0.0 版本以便与最新的加密系统保持联系,但我找不到任何使用此版本的示例。
这是我的实际代码:
在 Programs.cs 中:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
SqlColumnEncryptionAzureKeyVaultProvider sqlColumnEncryptionAzureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(customProviders: new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>(capacity: 1, comparer: StringComparer.OrdinalIgnoreCase)
{
{
SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, sqlColumnEncryptionAzureKeyVaultProvider
}
});
}
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
private static string GetKeyVaultEndpoint() => "https://.........azure.net/";
我已将我的数据库列配置为使用我的 azure Keyvault 加密,并在我的连接字符串中设置 Column Encryption Setting=enabled。
一切正常,但如果我更新 Nuget,那么下面的方法是错误的。
new SqlColumnEncryptionAzureKeyVaultProvider(new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
错误类似于:无法从方法组转换为令牌凭据
是否有任何文档或代码示例可以在 asp.Core 3.0 Code first 环境中实现 3.0.0 版本?
提前谢谢。
解决方案
不幸的是,我无法让它工作。我当然对参数感到困惑:静态只读字符串 s_akvUrl = "https://{KeyVaultName}.vault.azure.net/keys/{Key}/{KeyIdentifier}"; 静态只读字符串 s_clientId = "{Application_Client_ID}"; 静态只读字符串 s_clientSecret = "{Application_Client_Secret}";
我只有 https://{KeyVaultName}.vault.azure.net,我不知道 Key 和 KeyIdentifier 是什么意思。clientId 和 client Secret 相同。我试图将在 KeyVault 和 clientID 中生成的密钥放在我的 Web 应用程序之一,但似乎我无法获取我的令牌
推荐阅读
- python - 标记矩阵
- javascript - localStorage 区分不存在的键和空值
- google-visualization - 无法在所有设备上显示 Google 图表时间线
- java - 使用字符串和双精度数组
- regex - 使用 grep 按所有者/读取权限列出文件
- r - 如何在不回收且不使用循环的情况下连接不同长度的向量?
- r - 将 Holt-Winters 季节性方法应用于每日数据时出错
- c++ - 如何使简单的循环更通用
- python - 用不同范围内的随机数填充可变长度的 1D numpy 数组的有效方法
- vue.js - Vue mutate prop 由 v-bind 与同步修饰符绑定