0

我有一個連接到加密數據源的Web API OData控制器。我想發送數據到客戶端作爲加密,但不想從客戶端獲得搜索/過濾功能。客戶端需要對數據進行查詢,就像它是未加密的數據一樣。我的意思是客戶沒有加密搜索條件,然後傳遞給odata。如何在保持搜索/過濾器未加密的同時加密OData的輸出結果?

我發現沒有比鍵入序列化器更好的地方做到這一點。我試圖定製它並在那個地方加密數據。它適用於某些情況,但不是所有情況。當在瀏覽器中直接調用odata(不在客戶端應用程序中)時,它不起作用。當客戶決定只獲得特定領域時,它不會再工作。

當從odata獲取加密數據時,客戶端將解密數據。

我的問題是注入我的加密機制的正確位置?有沒有更好的解決方案?

下面顯示了我目前正在做的事情。我也問過類似的問題here,here,here,herehere,但確實得到了我的問題的答案。

enter image description here

回答

0

如果我理解正確的,你想與加密解密取決於您的ODATA模型的屬性性質,並根據客戶的要求設置返回模式。所以輸出可能看起來像這樣:

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

而是在串行器級別我真的在業務邏輯執行該操作重新加密的數據由你ODATA控制器(或控制器本身,如果你叫的沒有分開你的業務邏輯)。

這種方法的好處是您仍然擁有所有信息(查詢,完整模型),而在外出串行器中加密數據也會導致將加密/解密密鑰分割成單獨的位置。

如果你也有類似的替代使用的實體,並進一步抽象你的業務邏輯從ODATA邏輯(擴展)的方法和你的實體這一

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

流,你也可以使用AutoMapper來執行轉換,並提供一個特定的構造函數或類型轉換器它:

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

如果這不回答你的問題還是沒有完全解決您的問題,請與進一步的細節,也許一些例子描述。