웹 응용 프로그램 localhost를 실행할 때 아래 코드가 제대로 작동하지만 IIS 서버에 설치하지 않는 이유는 무엇입니까? 이 Active Directory에 추가 호출없이 SID 또는 UPN에 대한 액세스를 제공하지 않는 한System.DirectoryServices.AccountManagement.UserPrincipal - localhost (iis가 아님)
using (HostingEnvironment.Impersonate())
{
UserPrincipal activeUser = UserPrincipal.Current;
String activeUserSid = activeUser.Sid.ToString();
String activeUserUPN = activeUser.UserPrincipalName;
}
내가 HttpContext.Current.User
스틱 제안하지 마십시오.
웹 응용 프로그램은 세 개의 별도 도메인에서 Windows 인증을받은 사용자가 사용하며 웹 서버는 네 번째 도메인에서 호스팅됩니다. 응용 프로그램 풀이 NetworkService
ID로 실행되도록 구성되었으며 웹 응용 프로그램 구성에 ID 가장이 true로 설정되어 있습니다. 이 IIS에서 실행
오류 메시지는 다음과 같습니다
Error in Page_Load(): UserPrincipal.Current.
System.InvalidCastException: Unable to cast object of type 'System.DirectoryServices.AccountManagement.GroupPrincipal' to type 'System.DirectoryServices.AccountManagement.UserPrincipal'.
at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)
at System.DirectoryServices.AccountManagement.UserPrincipal.get_Current()
at webapp.Details.Default.Page_Load(Object sender, EventArgs e)
편집 : 시도 다음 두 불행하게도 같은 오류가 발생합니다.
UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);
나는 당신이 옳다고 생각합니다. 이것은 작동하지 않습니다 ... var wi = HttpContext.Current.User.Identity as WindowsIdentity; using (wi.Impersonate()) { UserPrincipal up = UserPrincipal.Current; activeUserUPN = up.UserPrincipalName; activeUserSid = up.Sid.ToString(); } – RichardD
IIS에서 "스레드가 실행중인 현재 사용자"는 IIS 응용 프로그램 풀 ID 일 가능성이 큽니다. 그러나 Visual Studio, Casini 또는 IIS Express에서 PC를 실행할 때 실행됩니다. 이 경우 사용자 ID는 페이지 및 로컬로 실행중인 개발 서버를 요청하는 클라이언트에 의해 공유됩니다. –