2009-03-11 7 views
0

Ich habe folgendes:Speichern von Passwörtern in Castle Windsor Konfigurationsdatei?

interface IDefectRepository { /* ... */ } 
class MyDefectRepository : IDefectRepository 
{ 
    public MyDefectRepository(string url, string userName, string password) 
    { 
     // ... 
    } 

    // ... 
} 

Ich verwende <Parameter> die Konstruktorparameter von Web.config zu übergeben. Gibt es eine Möglichkeit, das Kennwort verschlüsselt in der Datei Web.config zu speichern? Andere Vorschläge?

Antwort

1

Sie könnten das Passwort über eine ISubDependencyResolver (sample1, sample2) injizieren, die das Passwort von einem encrypted section in Ihrer web.config bekommen würde.

+0

Ich mag diese Idee. Ganz einfach, elegant und am wichtigsten - transparent für die oberen (oder inneren, abhängig von Ihrer Architektur) Schichten. –

1

Versuchen Sie erben MyDefectRepositoryWithEncryptedPasswords von MyDefectRepository. Im MyDefectRepositoryWithEncryptedPasswords Konstruktor das Passwort entschlüsseln und an den MyDefectRepository Konstruktor übergeben, etwa so:

class MyDefectRepositoryWithEncryptedPasswords : MyDefectRepository 
{ 
    public MyDefectRepositoryWithEncryptedPasswords(string url, string userName, string encryptedPassword) 
     : base(url, userName, Decrypt(encryptedPassword)) 
    { 
    } 

    public static string Decrypt(string encrypted) 
    { 
     // Do whatever... 
    } 
} 

Wie dem auch sei, ich glaube nicht, dass Sie verschlüsselte Passwörter mit Zwei-Wege-Verschlüsselungsverfahren gespeichert werden sollte. Sie sollten eine Art von Hashing (der kryptografischen Art) verwenden und die Hashes vergleichen. Das würde bedeuten, dass Sie Ihren Konstruktor ändern müssen, um nicht das Passwort, sondern dessen Hash zu erhalten.

+0

+1 Speichern Sie niemals wiederherstellbare Passwörter, wenn Sie nur ein Passwort authentifizieren müssen. Speichern Sie kryptografische Hashes des Kennworts stattdessen. –

+0

Kann das nicht tun: Es ist das andere Ende, das das Passwort benötigt, und ich muss es bereitstellen. Stellen Sie es sich als MyRemoteDefectRepository vor. –

+0

@Roger: Ich dachte daran und deshalb habe ich die Unterklasse/Wrapper-Lösung vorgeschlagen. Vergessen Sie nicht, einen sicheren Kanal zu verwenden, um das Passwort zu übertragen. –