首页 > 解决方案 > 如何在 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 版本?

提前谢谢。

标签: c#asp.net-coreazure-keyvaultalways-encrypted

解决方案


不幸的是,我无法让它工作。我当然对参数感到困惑:静态只读字符串 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 应用程序之一,但似乎我无法获取我的令牌


推荐阅读