0

Ich habe einen Web API OData Controller, der mit einer verschlüsselten Datenquelle verbunden ist. Ich möchte Daten verschlüsselt an Clients senden, möchte aber keine Such-/Filterfunktionen vom Client erhalten. Es ist erforderlich, dass der Client Daten wie unverschlüsselte Daten abfragen kann. Ich meine, der Kunde muss die Suchkriterien nicht verschlüsseln und dann an die OData übergeben.Wie wird das Ausgabeergebnis von OData verschlüsselt, während die Suche/Filter nicht verschlüsselt bleiben?

Ich fand nirgendwo besser als Typ Serializer dies zu tun. Ich habe versucht, es anzupassen und Daten an diesem Ort zu verschlüsseln. Es funktioniert in einigen Situationen, aber nicht in allen Situationen. Wenn Odata direkt im Browser (nicht in der Client-App) aufgerufen wird, funktioniert es nicht. Wenn der Kunde entscheidet, nur bestimmte Felder zu bekommen, funktioniert es nicht wieder.

Client wird Daten entschlüsseln, wenn verschlüsselte Daten aus Odata erhalten.

Meine Frage ist es ein korrekter Ort, um meinen Verschlüsselungsmechanismus zu injizieren? Gibt es eine bessere Lösung?

Folgendes zeigt, was ich gerade mache. Ich habe auch ähnliche Fragen gestellt here, here, here, here und here, aber habe eine Antwort auf mein Problem bekommen.

enter image description here

Antwort

0

Wenn ich Sie richtig verstanden habe, wollen Sie ein Modell zurück mit verschlüsselten oder entschlüsselt Eigenschaften auf die Eigenschaften Ihres ODATA je nach Modell und auf den Client-Anfrage Einstellungen abhängig. So könnte eine Ausgabe wie folgt aussehen:

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

Statt Umverschlüsselung Daten auf der Serializer Ebene würde ich tatsächlich, dass der Betrieb in der Business-Logik durchzuführen, die von Ihnen ODATA Controller (oder in der Steuerung selbst, wenn Sie aufgerufen habe deine Geschäftslogik nicht getrennt). Der Vorteil dieses Ansatzes besteht darin, dass Sie immer noch alle Informationen (Abfrage, vollständiges Modell) zur Verfügung haben, während das Verschlüsseln der Daten im ausgehenden Serialisierer auch dazu führen würde, dass die Verschlüsselungs-/Entschlüsselungsschlüssel in separate Speicherorte aufgeteilt werden.

Wenn Sie einen Fluss ähnlich wie diese haben

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

Anstelle der Verwendung von (Erweiterung) Methoden auf den Entitäten und weiter zu abstrakt Ihre Geschäftslogik von der ODATA Logik und Ihre Entitäten, könnten Sie auch AutoMapper verwenden, um Ihre Konvertierung durchführen und einen bestimmten Hersteller oder Typ-Konverter es liefern:

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

Wenn dies nicht Ihre Frage nicht beantworten oder Adressen nicht vollständig Ihr Problem, beschreiben sie mit weiteren Details und vielleicht einige Beispiele.

Verwandte Themen