Im Umgang mit Passwörtern gibt es im WPF ein paar Punkte zu beachten.
Ihre Einstellungen werden als string serialisiert in der WMS Datenbank gespeichert. Wie die Einstellungsdaten serialisiert / deserialisiert werden liegt an Ihrer Implementierung.
Sollte zu einer Einstellung ein Passwort notwendig sein, sorgen Sie dafür, dass das Passwort nicht im Klartext serialisiert wird!
PasswordBox
Damit der Anwender ein Passwort an der Oberfläche eintragen ist, ist eine PasswordBox notwendig..
Wie setze ich das Passwort für die PasswortBox?
Die Passwortbox erlaubt aus Sicherheitsgründen kein Binding auf die Eigenschaft im ViewModel. Daher ist das Passwort in der Codebehind-Datei (.xaml.cs) zu setzen.
<PasswordBox Name="PasswordBox" Grid.Row="2" Grid.Column="1" PasswordChanged="PasswordBox_PasswordChanged"/>
public partial class MySettingControl: UserControl { public MySettingControl(string a_sSettings) { InitializeComponent(); var oViewModel = new MySettingControlViewModel(a_sSettings); DataContext = oViewModel; //Passwortbox erlaubt keine Bindings, daher hier setzen. PasswordBox.Password = new NetworkCredential(string.Empty, oViewModel.Password).Password; }
Wie aktualisiere ich das Passwort in meinem ViewModel?
Um nun das Passwort im ViewModel zu aktualisieren, muss auf das PasswordChanged-Event der PasswordBox zurückgegriffen werden. Das Changed-Event implementieren Sie wiederum in der CodeBehind:
public partial class MySettingControl: UserControl { private void PasswordBox_PasswordChanged(object sender, System.Windows.RoutedEventArgs e) { var oViewModel = DataContext as MySettingControlViewModel; if (oViewModel == null) return; oViewModel.Password = PasswordBox.SecurePassword; }
Passwort verschlüsseln / hashen
Speichern Sie das Passwort nicht im Klartext, sondern nutzen Sie einen Hash-Algorithmus.
Beispiele (u.a. Triple DES):