0

Ich schreibe seit Jahren Apps, aber ich habe gerade die Aufgabe, eine sehr einfache Lightswitch-App zu schreiben, die als internes Werkzeug für unser Entwicklerteam fungiert Bearbeiten Sie die Dev-Datenbank in der Web-App, die wir gerade erstellen.Wie bearbeite ich einen Passwort-Hash in Visual Studio LightSwitch

Ein Teil der App muss die Benutzertabelle bearbeiten und in der Lage sein, Benutzer in der Datenbank hinzuzufügen/zu bearbeiten, und muss daher mindestens einen verschlüsselten Hash in der Datenbank schreiben können.

Problem ist, dass ich eine externe Blowfish-Implementierung verwende, um die Hashes und Salze für die Kennwörter und nicht irgendwelche der eingebauten Sachen zur Verfügung zu stellen.

Also meine Frage ist das, wie in jedem der Eingänge, die ich auf den Bildschirmen ich Design, kann ich eine einfache Zeichenfolge akzeptieren, dann habe meine benutzerdefinierte Verschlüsselung in der Datenbank gespeichert, dachte ich, eine berechnete Eigenschaft könnte was gewesen sein Ich brauchte, aber es ist nicht.

Ich benutze Lightswitch unter Visual Studio 2013 Unternehmen in der C# Sprache mit .NET 4.5 als Basislinie und SqlServer als Back-End-Datenspeicher.

Prost Shawty

+0

Verwenden Sie den HTML- oder Silverlight LightSwitch-Client? Wenn Sie einen zuvor eingegebenen Wert anzeigen, müssen Sie weiterhin den unverschlüsselten Nur-Text sehen können? –

+0

Es ist ein Desktop/Silverlight Client chris. Ich bin nicht gestört, wenn ich neuen Wert sehen kann oder nicht, aber die Leute, die es verwenden, sind sehr neu zu diesem Zeug, also fügen Sie einfach einen einfachen Text passwd in das Passwortfeld auf den Details, dann haben sie speichern und wissen, dass die Passwort wurde auf dem Weg zur DB verschlüsselt ist genug für mich. – shawty

Antwort

0

Nach einem Wochenende des Spielens (Sie haben einfach nie die Chance, solche Dinge im Büro zu tun :-)) Ich kam mit der folgenden Lösung, die zu funktionieren scheint.

In meinem Fall ist die Verschlüsselungsbibliothek, die ich verwendete, "CryptSharp" Crypt Sharp Home Page, aber weil ich einen Desktop-Client mit Silverlight erstellen, cryptsharp würde nicht installieren, da es eine vollständige .NET-Laufzeit benötigt. Diese

führen mich untersuchen zu beginnen, was ich hatte einen Zugriff auf die Datenebene der Anwendung:

enter image description here

Nach ein paar Blog-Posts zu lesen und etwas mehr MSDN, habe ich herausgefunden, dass ich einhaken könnte eine Aktualisierungsfunktion.

Genauer gesagt, wenn Sie der Datenebene benutzerdefinierten Code hinzufügen, erhalten Sie eine "Aktualisierung" (und andere) für jedes Ihrer Datenobjektmodelle, und damit (Nach dem Hinzufügen von CryptSharp über NuGet), endete ich mit:

partial void Users_Updating(User entity) 
    { 
     string encryptedPassword = ""; 
     string encryptedSalt = ""; 

     GenerateEncryptedPasswordAndSalt(entity.Password, out encryptedPassword, out encryptedSalt); 

     entity.Password = encryptedPassword; 
     entity.PasswordSalt = encryptedSalt; 
    } 

welche süß und einfach meine Verschlüsselung gilt für was auch immer in das Formular eingegeben wurde vor angeklickt speichern, frischt dann das Formular das verschlüsselte Passwort und Salz zu zeigen.

Was ich tun darf, ist das eigentliche Passwort schreibgeschützt, und habe ein Pop-up, um das Klartext-Passwort einzugeben, so dass es keine Verwirrung gibt, aber für jetzt löst dies mein Problem.

@Chris Cook - vielen Dank für Ihren Vorschlag, es gibt mir ein wenig mehr zu erkunden (ich wirklich nicht viel mit LightSwitch um ehrlich zu sein) und neue Erkundung der Dinge ist immer interessant. Wenn Sie irgendwelche Kommentare darüber haben, wie ich das gelöst habe, wäre ich immer noch interessiert, die Vor- und Nachteile zu hören.

1

Ein Ansatz wäre Ihr Passwort Feldes entlang der folgenden Zeilen benutzerdefinierte Validierungsmethode zu verwenden:

namespace LightSwitchApplication 
{ 
    public partial class User 
    { 
     partial void Password_Validate(EntityValidationResultsBuilder results) 
     { 
      this.Password = YourEncryptFunction(this.Password); 
     } 
    } 
} 

Wie Sie den Silverlight-Client verwenden, wird diese Validate-Methode auf ausführen sowohl die Client- als auch die Server-Ebene.

Wenn Sie Ihren Code nur zu zwingen, läuft auf der Serverebene (vielleicht, weil es nicht in das Reich der Silverlight unterstützt wird :-) Sie Ihren Code in eine bedingte Kompilierung Richtlinie wickeln müssen, wie folgt:

namespace LightSwitchApplication 
{ 
    public partial class User 
    { 
     partial void Password_Validate(EntityValidationResultsBuilder results) 
     { 
#if !SILVERLIGHT 
      this.Password = YourEncryptFunction(this.Password); 
#endif 
     } 
    } 
} 
+0

Danke, Chris, ich werde mir das später noch einmal anschauen, im Moment habe ich einige UserUpdate-Ereignisse in der eigentlichen Datenschicht gefunden, die vielversprechend aussehen. Ich benutze CryptSharp für die Verschlüsselung, so musste ich aufgeben, zu versuchen, dies auf der Ebene der Benutzeroberfläche hinzufügen, wie Silverlight Chokes in der Bibliothek – shawty

+0

Hallo chris, ich habe meine eigene Antwort hinzugefügt, aber immer noch in Ihrem Feedback interessiert sein Du hast offensichtlich mehr mit LS gemacht als ich. Ich verbringe die meiste Zeit im Frontend und im Web-Land. – shawty