문제

코드에서 요청하는 사용자를 가장하는 ASP.NET 페이지에서 작업 중입니다. 우리는 다음 코드를 사용하여 가장합니다.

Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()

그 후 우리는 응용 프로그램이 호출을 통해 적절한 컨텍스트에서 실행되고 있음을 확인했습니다.

System.Security.Principal.WindowsIdentity.GetCurrent().Name

이는 사용자의 적절한 신원을 반환하고 파일 액세스 및 기타 항목이 해당 계정을 사용하는 것으로 보입니다. 그러나 Microsoft 응용 프로그램 데이터 애플리케이션을 사용하는 경우 SQLHELPER 클래스는 "NT Authority 익명 로그온"사용자에 대한 신뢰할 수있는 연결 인증을 사용하여 데이터베이스를 호출하기 위해 데이터베이스를 호출합니다.

우리는 현재 신원이 여전히 우리의 원하는 계정이 아니라 익명 로그인 계정이라는 실패 후에 다시 검증 할 수 있습니다.

왜 이것이 왜 그런지 생각이 있습니까? 또는 더 구체적으로 우리가 어떻게 돌아올 수 있습니까?

편집하다이 페이지의 통화가 작동하는 방법에 대한 추가 정보.

우리는 .aspx 페이지에서 가장 한 전화를합니다.

우리가 가장 한 후에 우리는 언급 된 "비즈니스 로직"어셈블리를 요구합니다.

우리는 상황 정체성이 여전히 여기에 정확하다는 것을 알고 있습니다.

그 후, "비즈니스 로직"어셈블리는 실제로 신뢰할 수있는 연결 호출을 실행하는 다른 어셈블리를 호출합니다. 이 "데이터 액세스"어셈블리를 수정할 수 없으며, 인증 예외는이 어셈블리에서도보고됩니다.

도움이 되었습니까?

해결책

@John Sonmez가 옳다고 생각합니다. 더블 홉 문제를 겪고 있습니다. 가장은 이야기의 절반에 불과하며, 또한 대표단을 살펴 봐야합니다 (네트워크가 Kerberos 인증을 사용하고 있다고 가정). 아래 기사는 같은 문제를 통해 저를 도와주는 데 가장 유용했습니다.

사칭과 대표단

ASP.NET 대표단

다른 팁

나는 (c# 사용 및 파일 시스템에 액세스하기 전에 ASP.NET에서 가장을 사용했음을 알고 있으며, 포함 된 논리를 포장했는지 궁금했습니다. currentwindowsidentity.impersonate () '사용 / 종료 사용'(코드 블록의 보안 컨텍스트를 명시 적으로 정의하기 위해).

따라서 다음과 같습니다.

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top