우리는 Windows의 파일 탐색기 클라이언트에 서비스를 제공하려는 Java로 WebDAV 서버를 개발 중입니다. curl
좋은 응답을 제공하는 다음 명령을 실행할 수 있습니다 .
>curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1!
명령에서와 동일한 사용자 및 비밀번호를 지정하면서 파일 탐색기를 사용하여 "네트워크 드라이브 연결"을 시도하면 curl
"인증되지 않은" 응답을 받습니다.
우리는 Windows의 파일 탐색기 클라이언트에 서비스를 제공하려는 Java로 WebDAV 서버를 개발 중입니다. 좋은 응답을 제공하는 다음 컬 명령을 실행할 수 있습니다.
컬 -i -X 옵션 http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1! 컬 명령에서와 동일한 사용자 및 비밀번호를 지정하면서 파일 탐색기를 사용하여 "네트워크 드라이브 연결"을 시도하면 "인증되지 않은" 응답을 받습니다.
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>
또 다른 이상한 점은 요청에 대한 웹앱 로그에서 활동을 볼 수 있지만 curl
파일 탐색기 요청에 대한 활동은 볼 수 없다는 것입니다.
서로 다른 응답을 발생시키는 두 OPTIONS 요청의 중요한 차이점은 무엇입니까? 허용 가능한 요청(예: 's'에 해당하는 요청)을 생성하도록 파일 탐색기에서 무엇을 할 수 있습니까 curl
?
이를 바탕으로기사, 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 서버는 이러한 매개변수를 이해하도록 프로그래밍되어야 합니다.