Wir entwickeln einen WebDAV-Server in Java, den wir einem Windows-Datei-Explorer-Client bereitstellen möchten. Ich kann den folgenden curl
Befehl ausführen, der eine gute Antwort liefert:
>curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1!
Wenn ich versuche, mithilfe des Datei-Explorers ein „Netzlaufwerk zuzuordnen“, und dabei denselben Benutzer und dasselbe Kennwort wie im curl
Befehl angebe, erhalte ich die Antwort „nicht autorisiert“.
Wir entwickeln einen WebDAV-Server in Java, den wir einem Windows-Datei-Explorer-Client bereitstellen möchten. Ich kann den folgenden Curl-Befehl ausführen, der eine gute Antwort liefert:
curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1! Wenn ich versuche, mit dem Datei-Explorer ein „Netzlaufwerk zuzuordnen“, während ich denselben Benutzer und dasselbe Passwort angebe wie im curl-Befehl, erhalte ich die Antwort „nicht autorisiert“.
Ich habe die Anfragen und Antworten mit WireShark untersucht. Für curl
sehe ich:
OPTIONS /storage-explorer/rest/dav HTTP/1.1
Host: localhost:8080
Authorization: Basic am9lOkpvZVNjaG1vMSE=
User-Agent: curl/8.4.0
Accept: */*
HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
Server: milton.io-3.0.0.1
Pragma: no-cache
DAV: 1, 2
Accept-Ranges: bytes
Date: Wed, 27 Mar 2024 17:46:05 GMT
Allow: HEAD, PROPFIND, REPORT, OPTIONS, HEAD, PROPPATCH
Connection: keep-alive
Content-Length: 0
MS-Author-Via: DAV
Im Datei-Explorer wird Folgendes angezeigt:
OPTIONS /storage-explorer/rest/dav HTTP/1.1
Connection: Keep-Alive
User-Agent: Microsoft-WebDAV-MiniRedir/10.0.19045
translate: f
Host: localhost:8080
HTTP/1.1 401 Unauthorized
Expires: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="ApplicationRealm"
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html;charset=UTF-8
Content-Length: 71
Date: Wed, 27 Mar 2024 18:06:34 GMT
<html><head><title>Error</title></head><body>Unauthorized</body></html>
Eine weitere Merkwürdigkeit ist, dass ich im Protokoll unserer Webanwendung Aktivität für die curl
Anfrage sehen kann, aber nicht für die Datei-Explorer-Anfrage.
Was ist der wichtige Unterschied zwischen den beiden OPTIONS-Anfragen, der die unterschiedlichen Antworten verursacht? Was kann ich im Datei-Explorer tun, damit er eine akzeptable Anfrage generiert, z. B. eine, die curl
's entspricht?
Basierend aufArtikel, ich habe regedit
die HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel
Einstellung geändert, um http zuzulassen, aber es hat keinen Unterschied gemacht.
Ich bin für alle Vorschläge zur Fehlerbehebung offen.
Antwort1
Der wichtige Unterschied ist dieser Teil:
Authorization: Basic am9lOkpvZVNjaG1vMSE=
Die Zeichenfolge nach dem Wort „Basic“ ist eine Base64-Kodierung Ihres Benutzernamens und Passworts. Ihr WebDAV-Server erlaubt offensichtlich keinen anonymen Zugriff auf diese Ressource.
Ich kann nicht wissen, wie Ihre Seite und der Servercode programmiert sind, aber offensichtlich werden der eingegebene Benutzername/das Passwort nicht wie in der generierten Anfrage an den Server weitergegeben.
Eine Alternative zur Übergabe des Benutzers/Passworts über einen Authorization
Header besteht darin, dies über an die URL angehängte Abfrageparameter zu tun, wie z http://example.com?u=username,p=password
. B. . Eine andere Möglichkeit ist: .http://username:[email protected]/
Ihr WebDAV-Server sollte so programmiert sein, dass er solche Parameter versteht.