私たちは、Windows のファイル エクスプローラー クライアントに提供したい WebDAV サーバーを Java で開発しています。次のcurl
コマンドを実行すると、適切な応答が得られます。
>curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1!
コマンドと同じユーザー名とパスワードを指定して、ファイル エクスプローラーを使用して「ネットワーク ドライブのマップ」を実行しようとするとcurl
、「許可されていません」という応答が返されます。
私たちは、Windows のファイル エクスプローラー クライアントに提供したい WebDAV サーバーを Java で開発しています。次の curl コマンドを実行すると、適切な応答が得られます。
curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1! curl コマンドと同じユーザー名とパスワードを指定して、ファイル エクスプローラーを使用して「ネットワーク ドライブのマップ」を実行しようとすると、「unauthorized」という応答が返されます。
WireShark を使用してリクエストと応答を調べました。 についてはcurl
、次のようになります。
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
ファイルエクスプローラーの場合、次のように表示されます。
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>
もう 1 つの奇妙な点は、Web アプリのログでリクエストのアクティビティを確認できるのにcurl
、ファイル エクスプローラーのリクエストのアクティビティが確認できないことです。
curl
異なる応答を引き起こす 2 つの OPTIONS 要求の重要な違いは何ですか? ファイル エクスプローラーから、たとえば'sと同等の許容可能な要求を生成するにはどうすればよいでしょうか?
これに基づいて記事以前は、 http を許可するように設定regedit
を変更しましたHKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel
が、違いはありませんでした。
デバッグに関する提案があれば歓迎します。
答え1
重要な違いは次の部分です:
Authorization: Basic am9lOkpvZVNjaG1vMSE=
「Basic」という単語の後の文字列は、ユーザー名とパスワードの base64 エンコードです。WebDAV サーバーは、このリソースへの匿名アクセスを許可していないようです。
あなたのページとサーバー コードがどのようにプログラムされているかはわかりませんが、明らかに、入力されたユーザー名/パスワードは、生成されたリクエスト内としてサーバーに渡されません。
ヘッダー経由でユーザー/パスワードを渡す代わりにAuthorization
、 などの URL に追加されたクエリ パラメータを使用して渡すこともできますhttp://example.com?u=username,p=password
。別のオプションは次のとおりです。http://username:[email protected]/
WebDAV サーバーは、このようなパラメータを理解するようにプログラムする必要があります。