문제

Windows 2003 서버에 ASP.NET 웹 사이트가 있으며 네트워크 공유에서 파일에 액세스해야합니다. 네트워크 공유는 비밀번호로 보호되며 제공하려면 사용자 이름과 비밀번호가 필요합니다.

Windows 기반이 아닌 웹 사이트에서 Forms 기반 인증을 사용합니다.

따라서 내 문제는 아래 코드를 사용하여 NetworkShare의 파일을 읽으려고 할 때 DeprectoryInfo NetworkShare = New DirectoryInfo ( " TestServer share")를 버린다는 것입니다.

그래서 네트워크 공유의 사용자 이름과 비밀번호를 가장 함수 호출에 제공함으로써 최저 사용을 시도했지만 ASP.NET 웹 서버에 사용자 이름이 존재하지 않기 때문에 호출은 분명히 실패합니다. 따라서 웹 서버에 존재하는 로그인의 사용자 이름과 비밀번호를 전달 했으므로 이번에는 최저 호출이 작동하지만 네트워크 공유에 액세스 할 수는 없습니다. 네트워크 공유 사용자 이름과 비밀번호는 다릅니다.

마지막으로, 네트워크 공유와 일치하는 웹 서버에서 정확히 동일한 사용자 이름/비밀번호를 만들었습니다. 이번에는 기능 통화가 작동하며 네트워크 공유도 마찬가지입니다. 나는 공유에서 성공적으로 읽을 수 있습니다.

따라서 내 질문은 웹 서버에 사용자 이름을 추가하지 않고 네트워크 공유를 읽을 수있는 방법이 있다는 것입니다. '네트워크 공유 로그인이 변경 될 때마다 웹 서버에서 새로운 사용자 이름도 다시 만들어야합니다. 이상적이지 않습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

이를 수행하는 "올바른"방법은 Webserver의 AppPool을 공유에 액세스 할 수있는 신원으로 실행하는 것입니다. 이렇게하면 유일한 자격 증명 스토리지는 코드 또는 읽기 가능한 구성 파일이 아닌 IIS 구성에서 안전하게 수행됩니다. 웹 서버와 파일 서버를 동일한 Windows 도메인 (또는 신뢰할 수있는 다른 도메인)에 넣는 것이 가장 쉬운 방법이지만 "동일한 사용자 이름/암호"도 작동해야합니다.

코드 또는 구성에 사용자 이름/암호를 넣는 데 관심이없는 경우 WNETADDConnection2로 P/를 호출하고 사용자 이름/비밀번호를 전달할 수 있습니다. 그러면 공유에 액세스 할 수 있어야합니다. 이렇게하면 웹 서버가 일치하는 계정을 가질 필요는 없지만 실제로 암호를 보호해야합니다 (암호화 된 레지스트리 스토리지에 대한 System.Security.Cryptography.ProtectedData를 확인하십시오).

다른 팁

이 시도

WebRequest request = WebRequest.Create( "http://server/file.xml" );
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "user", "pass" );

request.GetResponse();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top