Всегда зашифрованы с помощью Asp.net

Мы пытаемся использовать функцию Always Encrypted в Sql 2016 с Asp.net Identity 2.0. У нас есть требование зашифровать данные клиента, когда мы сохраняем их в таблице AspNetUsers. Это должно следовать соблюдению GDPR. Мы установили Always Encrpted для столбцов PhoneNumber и Email. Мы можем зашифровать номер телефона, но метод регистрации в Account Controller не удается, когда мы пытаемся зашифровать столбец электронной почты. При попытке зарегистрироваться мы получаем следующее исключение:

System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext () "," InnerException ": {" Message ":" Произошла ошибка.", "ExceptionMessage": " Тип операндов clash: 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 Identity

1 ответ

Решение

Я тоже боролся с этим вопросом и думаю, что нашел решение.

ASP.NET Identity использует UserStore: см. Здесь реализацию

В этом UserStore некоторые методы используют метод ToUpper. Ваш столбец электронной почты зашифрован, и поэтому метод ToUpper не может работать. Он не может создать запрос, который содержит логику SQL ToUpper.

Что мы делаем, это создаем нашу собственную реализацию IUserStore и удаляем ToUpper из запросов на EmailAddress.

Другие вопросы по тегам