0

私はWeb API ODataコントローラを暗号化されたデータソースに接続しています。私は暗号化されたデータをクライアントに送り返したいが、クライアントから検索/フィルタ機能を取得したくない。クライアントは、暗号化されていないデータのようにデータを照会する必要があります。私はクライアントが検索条件を暗号化してからodataに渡さないことを意味します。検索/フィルタを暗号化しないでODataの出力結果を暗号化する方法は?

これを行うには、シリアライザよりも優れた場所は見つかりませんでした。私はそれをカスタマイズし、その場所でデータを暗号化しようとしました。いくつかの状況では動作しますが、すべての状況では動作しません。 odataが(クライアントアプリケーションではなく)ブラウザで直接呼び出されると、機能しません。クライアントが特定のフィールドのみを取得することにした場合、再び機能しません。

クライアントはodataから暗号化されたデータを取得するとデータを復号化します。

私の暗号化メカニズムを注入するのは正しいですか?もっと良い解決策はありますか?

以下は現在私がやっていることを示しています。私も同様の質問hereherehereherehereを尋ねましたが、私の問題の答えを得ました。

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); 

、詳細およびおそらくいくつかの例を挙げて説明してください。

関連する問題