Tại sao mã bên dưới hoạt động tốt khi tôi chạy localhost ứng dụng web của mình nhưng không phải khi tôi cài đặt nó vào máy chủ IIS?System.DirectoryServices.AccountManagement.UserPrincipal - localhost nhưng không phải là iis
using (HostingEnvironment.Impersonate())
{
UserPrincipal activeUser = UserPrincipal.Current;
String activeUserSid = activeUser.Sid.ToString();
String activeUserUPN = activeUser.UserPrincipalName;
}
Vui lòng không đề xuất tôi gắn bó với HttpContext.Current.User
vì nó không cung cấp quyền truy cập vào SID hoặc UPN mà không cần thêm cuộc gọi vào Active Directory.
Ứng dụng web sẽ được người dùng được xác thực Windows sử dụng từ ba miền riêng biệt, máy chủ web được lưu trữ trong miền thứ tư. Hồ bơi ứng dụng được định cấu hình để chạy dưới thông tin NetworkService
và cấu hình ứng dụng web có mạo danh nhận dạng được đặt thành true.
Các thông báo lỗi khi nó chạy trên IIS là:
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)
EDIT: Cố gắng cả sau và không may gặp phải lỗi tương tự.
UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);
Tôi nghĩ bạn nói đúng. Điều này không hoạt động ... var wi = HttpContext.Current.User.Identity as WindowsIdentity; sử dụng (wi.Impersonate()) { UserPrincipal up = UserPrincipal.Current; activeUserUPN = up.UserPrincipalName; activeUserSid = up.Sid.ToString(); } – RichardD
"người dùng hiện tại theo đó chuỗi đang chạy" trong IIS rất có thể là Bản sắc Hồ bơi ứng dụng IIS; nhưng khi chạy trên PC của bạn trong Visual Studio, Casini hoặc IIS Express, nó đang chạy như bạn. Trong trường hợp đó, danh tính của bạn được chia sẻ bởi khách hàng yêu cầu trang và máy chủ phát triển đang chạy cục bộ. –