始终使用 Asp.net 身份进行加密

Always Encrypted with Asp.net Identity

我们正在尝试将 Sql 2016 的 Always Encrypted 功能与 Asp.net Identity 2.0 一起使用。我们要求在将客户数据存储到 AspNetUsers table 时对其进行加密。这是为了遵守 GDPR。我们在 PhoneNumber 和 Email 列上设置了 Always Encrpted。我们能够加密 phone 号码,但是当我们尝试加密电子邮件列时,帐户控制器中的注册方法失败。当我们尝试注册时出现以下异常:

System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()", "InnerException": { "Message": "An error has occurred.", "ExceptionMessage": "Operand type clash: nvarchar(256) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'StoreIdentityEF6AE') collation_name = 'Latin1_General_BIN2' is incompatible with varchar", "ExceptionType": "System.Data.SqlClient.SqlException",

有没有人遇到过这个问题并成功解决了?寻找一些使用 Asp.net Identity

加密客户数据的建议

我也一直在为这个问题苦苦挣扎,我想我已经找到了解决方案。

ASP.NET 身份使用 UserStore:see implementation here

在 UserStore 中,一些方法使用了 ToUpper 方法。 您的电子邮件列已加密,因此 ToUpper 方法无法使用。它无法创建包含 SQL ToUpper 逻辑的查询。

我们所做的是构建 IUserStore 的自定义实现,并从对 EmailAddress 的查询中删除到 ToUpper。