Ich bin auf dasselbe Problem gestoßen und habe es gelöst. Einfach ausgedrückt gibt es mehrere häufige Ursachen für das Problem.
Warum die Digest-Authentifizierung in Windows 7 Mini-Redirector fehlschlägt
2. Juni 2014
Hier ist das Problem: Sie haben einen WebDAV-Server, der mit fast allen WebDAV-Clients außer Windows 7 Mini-Redirector funktioniert, wenn die Digest-Authentifizierung verwendet wird.
Zugegeben, warum die Wahl der Digest-Authentifizierung und das Festhalten an Windows 7 Mini-Redirector an sich eine Debatte sein könnte. In diesem Artikel werden solche Entwurfsoptionen nicht behandelt. Es soll nur mitteilen, was ich im Kampf mit dem WebDAV-Client von Microsoft gelernt habe, damit andere Leute den Preis in Zukunft nicht mehr zahlen.
Die übliche Möglichkeit, von Win7 aus eine Verbindung zu einem WebDAV-Server herzustellen, besteht darin, ein Windows Explorer-Fenster zu öffnen und der URL des Servers ein Netzlaufwerk zuzuordnen. Wenn der Server durch Digest-Authentifizierung geschützt ist, werden Sie aufgefordert, Ihren Benutzernamen und Ihr Kennwort einzugeben. Sie geben ein, senden es und es erscheint ein weiteres Feld, in dem Sie erneut nach Anmeldeinformationen gefragt werden. Sie geben dreimal die richtigen Anmeldeinformationen ein, und Windows lässt Sie nicht weiter versuchen.
Dies ist das Problem, mit dem ich konfrontiert war. Um die Sache interessanter zu machen, könnte das Problem maskiert werden, wenn Fiddler, der Web-Debugger, vorhanden ist. Das heißt, wann immer Fiddler der Mann in der Mitte ist, funktioniert es; Andernfalls funktioniert es nicht mehr.
Ich habe versucht, dieses Problem aus vielen Richtungen anzugehen, die ich später in diesem Beitrag behandeln werde, aber alle haben das Problem nicht gelöst.
Ich war ein großer Schritt vorwärts, als ich herausfand, dass Fiddler zwei verbindungsbezogene Optionen hat: "Client-Verbindung wiederverwenden" und "Server-Verbindung wiederverwenden". Beide sind aus Leistungsgründen standardmäßig aktiviert. Die zuvor beschriebenen Arbeits- / Nicht-Arbeitsszenarien können reproduziert werden, indem „Client-Verbindung wiederverwenden“ ein- und ausgeschaltet wird, ohne den Fiddler vollständig herunterzufahren.
Beim Vergleich der Verbindungsmuster meiner Sitzung mit der Sitzung zwischen Win 7-Client und Apache stellte sich heraus, dass mein WebDAV-Server die Verbindung immer trennt, insbesondere wenn 400 HTTP-Statuscode-Serien zurückgegeben werden, z. B. 401 Unauthorized. Die Lösung ist einfach: Wenn Sie die Verbindung bei 401 am Leben erhalten, wird das Problem sofort behoben.
Mein Kollege, ein erfahrener Entwickler, sagte mir, dies sei ein uralter Fehler von Microsoft, der seit über 12 Jahren besteht, aber nie behoben wurde. Der Client startet eine TCP-Verbindung, C, und sendet dann eine einfache HTTP-Anforderung. Der Server generiert eine 401-Antwort zusammen mit dem Header "WWW-Authenicate", einschließlich der Digest-Informationen, und sendet sie an den Client zurück. In diesem bestimmten Moment hat der Server die Wahl, die Verbindung entweder am Leben zu halten oder zu trennen, unabhängig davon, was der Header "Verbindung", "Keep-Alive" zuvor sagt. Angenommen, der Server hat beschlossen, die Verbindung zu trennen. Wenn die 401-Antwort an den Win 7-Client gesendet wird, wird ein für die Digest-Authentifizierung erforderlicher "Authorization" -Header berechnet. Der Win 7-Client besteht jedoch darauf, diesen Header über die zuvor erstellte Verbindung C weiterzuleiten , wenn C gebrochen ist, Es wird eine neue Verbindung gestartet, C ', eine einfache Anfrage OHNE den Header "Authorization" senden. An diesem Punkt sollten Sie in der Lage sein, vorherzusagen, was als nächstes passieren wird, und zu erklären, warum die Probleme mit mehreren Anmeldungen jemals auftreten.
Um den obigen Vorgang zusammenzufassen, sendet der Win 7-Client NUR den Header "Authorization" unter zwei Bedingungen: 1. Unmittelbar nach dem Absenden der Anmeldeinformationen, dh als der Header "Authorization" zum ersten Mal erstellt wurde. 2. Die Verbindung war dieselbe Verbindung, über die die ursprüngliche einfache Anfrage gesendet und die 401-Antwort erhalten wurde.
HTTP ist ein zustandsloses Protokoll. Weder Client noch Server sollten sich auf Zustände wie den Verbindungsstatus verlassen. Ein robuster Server wie Apache mit aktiviertem WebDAV-Modul oder ein robuster Client wie Cadaver können mit einem starren Client wie dem Win 7-Client oder einem starren Server wie meinem Server umgehen.
WebDAV mit Digest ist schwer zu korrigieren. Ich habe bisher nur zwei Server gesehen, von denen einer das beliebte Apache DAV-Modul ist. Der andere ist mein Server, nachdem dieser Fehler behoben wurde.
Win 7 WebDAV-Unterstützung ist in der Tat beschissen. Es gibt viele andere Möglichkeiten für Ihre Kunden. Cadaver ist ein ausgezeichneter Open-Source-WebDAV-Client auf Linux / Unix-Plattformen, Mac verfügt über integrierte WebDAV-Unterstützung und Clients von Drittanbietern wie Cyber Duck, BitKinex usw. sind eine gute Wahl. Wenn sich jedoch ein großer Teil Ihrer Kunden immer noch auf die Windows-Plattform verlässt und Win7 Mini-Redirector immer noch die bequemste Möglichkeit ist, auf ihren WebDAV-Server zuzugreifen, müssen Sie ihn möglicherweise noch für die Kunden verwenden. Hier sind einige andere mögliche Ursachen dafür, dass die Digest-Authentifizierung nicht funktioniert.
- Ihre Authentifizierungslogik ist falsch implementiert, sodass nicht einmal korrekte Anmeldeinformationen akzeptiert werden
- Der DAV-Antworttext verwendet den Standard-Namespace. Weitere Informationen finden Sie unter den folgenden Links:
http://www.greenbytes.de/tech/webdav/webdav-redirector-list.html#issue-namespace-handling
https: // Probleme. apache.org/bugzilla/show_bug.cgi?id=49428
- Wenn Sie den Header "Authentication-Info" senden, stellen Sie sicher, dass er funktioniert. Wenn> alle Header "Authentication-Info" senden, stellen Sie sicher, dass er funktioniert
Wenn Ihnen all dies nicht hilft, sind hier einige Ansätze aufgeführt, die ich bei der Suche nach der Grundursache als nützlich empfunden habe: 1. Verwenden Sie Fiddler, ngrep, um den Datenverkehr zu erfassen und zu untersuchen. 2. Verwenden Sie Open Source-Clients und -Server als Basisreferenz. Sie können die Maschinerie des Prozesses kennen, indem Sie den Code lesen. Der Code ist gut getestet und zuverlässig. 3. Erweitern Sie Ihre Perspektiven. Wenn die HTTP-Kommunikation nicht funktioniert, kann dies an Datenverkehr (Inhalt), Zeitüberschreitung (Timing), Verbindung (Kontext) usw. Liegen. 4. Denken Sie an die alte Tatsache: HTTP ist zustandslos. Aufgrund der hinzugefügten Zustände sollten keine Annahmen getroffen werden. 5. Lesen Sie den RFC sorgfältig durch und zögern Sie nicht, online Fragen zu stellen
Zum Abschluss ist die Digest-Authentifizierung ein stärkeres Schema als Basic. Basic bietet buchstäblich keinen Schutz in Bezug auf die heutigen Sicherheitstechnologien und Digest ist von Natur aus anfällig für Menschen im mittleren Angriff. Bitte überlegen Sie genau, in welchem Sicherheitskontext Sie sie verwenden.