0

У меня есть контроллер Web API OData, который подключен к зашифрованному источнику данных. Я хочу отправить данные обратно клиентам как зашифрованные, но не хочу получать от пользователя функцию поиска/фильтрации. Необходимо, чтобы клиент мог запрашивать данные, как будто это не зашифрованные данные. Я имею в виду, что клиент не должен шифровать критерии поиска, а затем переходить к одате.Как зашифровать выходной результат OData, не сохраняя при этом поиск/фильтры?

Я не нашел там, где лучше, чем сериализатор типа, чтобы это сделать. Я попытался настроить его и зашифровать данные в этом месте. Он работает в некоторых ситуациях, но не во всех ситуациях. Когда odata вызывается непосредственно в браузере (не в клиентском приложении), это не работает. когда клиент решает только получить определенные поля, он не работает снова.

Клиент будет расшифровывать данные при получении зашифрованных данных из одаты.

Мой вопрос: это правильное место для ввода моего механизма шифрования? Есть ли лучшее решение?

Следующие показывает, что я делаю в настоящее время. Я также задал аналогичные вопросы here, here, here, here и here, но получил ответ на мою проблему.

enter image description here

ответ

0

Если я вас правильно понял, вы хотите вернуть модель с зашифрованы или расшифрованы свойства в зависимости от свойств модели OData и в зависимости от настроек запроса клиента. Так выход может выглядеть следующим образом:

{ 
    "Name" : "clearText" 
    , 
    "Value" : "cryptText" 
} 

Вместо данных повторного шифрования на уровне serialiser я бы на самом деле выполнить эту операцию в бизнес-логики, которая называется вами OData контроллер (или в самом контроллере, если вы не отделили вашу бизнес-логику).

Преимущество такого подхода состоит в том, что у вас все еще есть вся информация (запрос, полная модель) на месте, тогда как шифрование данных в исходящем сериализаторе также приведет к разделению ключей шифрования/дешифрования в отдельные местоположения.

Если у вас есть поток, подобный этому

CryptEntity cryptEntity = db.Set<T>.FirstOrDefault(e => e.Id == key); 
ClearEntity clearEntity = cryptEntity.Decrypt(); 
// perform search depending on query settings 
cryptEntity = clearEntity.Encrypt(); 

Вместо использования (расширения) методы субъектов и в дальнейшем абстрактном ваш бизнес-логики от логики OData и ваши сущности, вы также можете использовать AutoMapper для выполнить ваши преобразования и поставить конкретный конструктор или преобразователь типа к нему:

var cryptEntity = Mapper.Map<CryptEntity>(clearEntity); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^