无法从“方法组”转换为“TokenCredential”

问题描述

尝试使用 column encryption 启用 azure key vault 时出现以下错误

无法从“方法组”转换为“TokenCredential”

我正在使用 .Net Core 3.1

主类

static void Main(string[] args)
{          

        InitializeAzurekeyvaultProvider();
}


private static void InitializeAzurekeyvaultProvider()
{
        _clientCredential = new ClientCredential(clientId,clientSecret);
        sqlColumnEncryptionAzurekeyvaultProvider azurekeyvaultProvider =
          new sqlColumnEncryptionAzurekeyvaultProvider(GetToken);  // error comes here

        Dictionary<string,sqlColumnEncryptionKeyStoreProvider> providers =
          new Dictionary<string,sqlColumnEncryptionKeyStoreProvider>();

        providers.Add(sqlColumnEncryptionAzurekeyvaultProvider.ProviderName,azurekeyvaultProvider);
        sqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
    }

private static async Task<string> GetToken(string authority,string resource,string scope)
{
        var authContext = new AuthenticationContext(authority);
        AuthenticationResult result = await authContext.AcquiretokenAsync(resource,_clientCredential);

        if (result == null)
            throw new InvalidOperationException("Failed to obtain the access token");
        return result.Accesstoken;
}

我正在尝试使用 key vault 解密 sql Server 中的加密列值,我指的是此文档:https://docs.microsoft.com/en-us/azure/azure-sql/database/always-encrypted-azure-key-vault-configure?tabs=azure-powershell

解决方法

正如 DavidG 和 MindSwipe 所解释的,问题通过将以下 nuget 包降级到 v1

 Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...