我们正在尝试将 Sql 2016 的"始终加密"功能与 Asp.net Identity 2.0 一起使用。 当我们将客户数据存储到 AspNetUsers 表时,我们需要对客户的数据进行加密。 这是为了遵循 GDPR 合规性。 我们已在电话号码和电子邮件列上设置了始终编码。 我们能够加密电话号码,但是当我们尝试加密电子邮件列时,帐户控制器中的注册方法失败。 当我们尝试注册时,我们会收到以下异常:
System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()", "内部异常":{ "消息": "发生错误。 "ExceptionMessage": "操作数类型冲突:nvarchar(256) 加密为 (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' 与 varchar 不兼容", "ExceptionType": "System.Data.SqlClient.SqlException",
有没有人遇到过这个问题并成功解决? 寻找一些使用 Asp.net 标识加密客户数据的建议
我也一直在这个问题上挣扎,并认为我已经找到了解决方案。
ASP.NET Identity 使用 UserStore:请参阅此处的实现
在该UserStore中,某些方法使用ToUpper方法。 您的电子邮件列已加密,因此ToUpper方法不起作用。它无法创建包含 SQL ToUpper 逻辑的查询。
我们要做的就是构建IUserStore的自定义实现,并从EmailAddress上的查询中删除到ToUpper。