2012-06-11 5 views
2

ASP.NET 프로젝트에서 이전 VB6 dll (소스 코드 없음)을 호출하려고합니다. DLL은 Windows 인증을 사용하는 서버에 연결되므로 NETWORKSERVICE가 아닌 특정 사용자로 함수를 호출해야합니다.ASP.NET 프로젝트에서 특정 사용자로 COM DLL 함수를 호출하십시오.

원격 사용자를 가장하고 있기 때문에 응용 프로그램 사용자가 아니라 NETWORKSERVICE가 아닌 현재 함수를 호출하는 사용자가되기를 원하기 때문에 이것은로드 시간이 아닌 호출 시간에 결정되는 것이 바람직합니다.

그래서 USER로 실행중인 브라우저에 USER라는 응용 프로그램에 연결하여 USER로 dll을 호출하지만 dll은 USER가 아닌 NETWORKSERVICE로 원격 서버에 연결하려고합니다.

이 dll을 USER로 원격 서버에 연결할 수 있습니까? 아니면, 아무것도 아닌 경우 응용 프로그램 사용자로 연결 하시겠습니까?

편집 :
가장을 원격 사용자의 WindowsIdentityImpersonate()를 호출하여 코드에서 이루어집니다. 내가 일하는 회사는 사용자 정의 SecurityPrincipalSecurityIdentity을 가지므로 WindowsIdentity (조금 더 깊이는 User.Identity)이 되려면 어떻게해야할까요?하지만이 방법을 성공적으로 사용하기 전에이 방법을 사용하여 확인했습니다. System.Security.Principal.WindowsIdentity.GetCurrent().Name 가장 중에 올바른 사용자입니다.

+0

@rkosegi 전체 게시물을 읽고, 나는 가장하고 있습니다. –

+0

응용 프로그램과 DLL간에 모든 것이 처리 중이지만 DLL이 여전히 다른 자격 증명을 사용하고 있다면 DLL 코드에 문제가 있음을 의미합니다. –

+0

정확히 ** 당신이 가장하고있는 방법에 대한 코드를 게시하는 것이 도움이 될 수 있습니다. ASP.NET의 응용 프로그램 풀은 기본적으로 네트워크 서비스에서 실행되며 사용자 컨텍스트를 제대로 전환하지 않으면이 사용자가 네트워크 리소스에 계속 액세스합니다. – Sumo

답변

0

결국 문제를 발견했는데 (어쨌든 다른 문제로 이어진다) 내 페이지에 AspCompat="true"이 누락 된 것으로 밝혀졌습니다. 실제로 문제는 내가 "페이지"가 ​​아니라 "처리기"를 사용하고 있다는 것이 었습니다. 핸들러에는 페이지에있는 STA 기능이 없습니다. COM 구성 요소에 액세스하려고 할 때마다 응용 프로그램이 MTA에서 실행 중이며 COM 구성 요소가 STA에서 실행되어야하기 때문에 스레드 전환 (가장이 손실 됨)이 발생했습니다.

1

먼저 다른 사용자로 DLL을 연결하는 방법을 찾으려고합니다 (Process Explorer). DLL이 NETWORKSERVICE로 로그인 한 상자에서 실행중인 서비스 (또는 다른 프로세스)와 통신하고있을 가능성이 있습니까? 그렇다면 change that service to run as a different user 수 있습니다. 그냥 빨대를 쥐고, 당신이 그것을 이해하기를 바랍니다!