2017-05-16 1 views
1

Ich habe ein Web-basiertes Tool. Auf dem Login-Formular wird das Passwort vor dem Senden gehashed. Alles in Ordnung, speichert die Datenbank nur Hash-Passwörter.Hash-Passwort vor Validierung mit LDAP

Jetzt möchten wir eine Anmeldung mit LDAP über DirectoryEntry. Aber der Konstruktor akzeptiert nur einfache Kennwörter.

Meine Frage: Wie kann ich gehashte Passwörter an DirectoryEntry-Klasse übergeben?

Aktuelle Methode:

public bool isAuthenticated(string domain, string username, string pwd) 
    { 
     string domainAndUsername = domain + @"\" + username; 
     DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd); 

     try 
     { 
      Object obj = entry.NativeObject; 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 

Antwort

1

Ich weiß nicht, C#, aber so weit wie LDAP-Protokoll geht, gibt es keine Möglichkeit, mit einem bereits Hash-Passwort zu authentifizieren.

Warum müssen Sie das Passwort vor der Übertragung hashen?

Wenn die Übertragung über das Netzwerk vermieden werden soll, besteht die einfachste Lösung darin, eine Verbindung zum LDAP-Verzeichnis über SSL herzustellen.

Als Randbemerkung, IMO, ist das Hash-Passwort Übertragung weniger sicher als die klar ein:

  • Wenn der Angreifer abfangen Antrag, wird er in der Lage sein, mit den Daten zu authentifizieren er entweder Weg gefunden
  • wenn der Angreifer in Dumping die Datenbank erfolgreich zu sein und das Hash-Passwort abrufen, wenn alles, was er zu übertragen ist tun muss, dass zu authentifizieren, es macht die Tatsache zu speichern, das Passwort nutzlos

gehasht

bearbeiten: Additionnal Informationen

Ich weiß nicht, welches LDAP-Verzeichnis, das Sie verwenden, aber auf OpenLDAP, könnte man diese Art von Mechanismus implementieren, wenn Sie den Bindevorgang nicht (zum Beispiel verwenden zu können, kann das Passwort-Richtlinien-Overlay nicht verwenden).

Sie können eine Implementierung SASL Proxy Authorization zu:

  • in das Verzeichnis eine Verbindung mit einem technischen Konto
  • suchen und abrufen den Eintrag Benutzer die
  • Test auf dem benutzerdefinierten Hash-Passwort-Attribut einzuloggen versucht, wenn die Hashed zur Verfügung gestellt ist die gespeicherte
  • Rebind mit einem anderen technischen Konto mit einer Vollmacht als Proxy-Benutzer

Es wird Sie noch profitiert von dem ACL-Mechanismus und Logging-System für Benutzer Operationen durchgeführt

sondern erlaubt: nur auf OpenLDAP Dieser wird zur Verfügung steht (oder wenn ein andere LDAP-Implementierung zu dem gleichen Mechanismus bieten), und es ist nicht wirklich Stand der Technik über das LDAP-Protokoll;)

+0

Der Programmierer hat die Möglichkeit, alle eingehenden Benutzer (und ihre Plain-Pass) zu speichern. Die ganze Firma muss dem Programmierer (mir) vertrauen, dass ich das nicht tue.Vor dem LDAP habe ich den Hash vor dem Senden und Hashing (gesalzen) auf der Serverseite erneut durchlaufen. Ich kann den Benutzerpass nicht erhalten und die Datenbank ist sicher. – user6537157

+0

@ user6537157 ok, ich kann die Idee verstehen. Aber die Tatsache, dass das LDAP-Protokoll erlaubt sich nicht, dass mit einer Bindeoperation noch gelten;) Zumindest ohne irgendeine Art von spezifischem Code Erstellen der functionnality im Backend (einen OpenLDAP-Overlay zum Beispiel zu ermöglichen) – Esteban

+0

@ user6537157 ich einige Informationen hinzugefügt über ein Workaround, den Sie implementieren könnten – Esteban