Vì máy tính của bạn không tham gia vào miền, chúng tôi không thể sử dụng WindowsIdentity hoặc WindowsPrincipal và sau đó kiểm tra phương thức IsInRole() của nó. Phương thức IsInRole() chỉ hoạt động nếu máy tính của bạn được nối với miền và nó đang sử dụng tài khoản máy miền của bạn để làm S4USelf.
Bạn không thể sử dụng phương pháp LogonUser vì máy tính của bạn sẽ không cho phép bạn tạo phiên đăng nhập từ một khu rừng không tin cậy.
Tôi nghĩ rằng chúng tôi chỉ có thể truy vấn Active Directory trực tiếp để nhận thông tin chúng tôi muốn. Mã trong Microsoft KB đã đăng của bạn không hoạt động tốt như tôi có thể nói. Nó đang cố truy vấn từ thuộc tính memberOf. Thông tin nhóm không phải lúc nào cũng có sẵn từ các thuộc tính memberOf.
Tôi vừa viết một hàm IsInRole() bằng cách sử dụng AccountManagement. Tôi đoán đây là những gì bạn muốn. Hàm IsInRole() sẽ gọi hàm đệ quy IsInGroup() để tìm ra tất cả các nhóm người dùng thuộc về.
private bool IsInRole(string domain, string username, string password, string role)
{
using (var context = new PrincipalContext(ContextType.Domain, domain, username, password))
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, role);
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);
return IsInGroup(user, group);
}
}
private bool IsInGroup(Principal principal, GroupPrincipal group)
{
if (principal.IsMemberOf(group))
return true;
foreach (var g in principal.GetGroups())
{
if (IsInGroup(g, group))
return true;
}
return false;
}
Để sử dụng hàm IsInRole() này, bạn cần cung cấp tên miền và thông tin xác thực tên miền của mình. Nếu tên người dùng và mật khẩu được cung cấp sai, bạn sẽ nhận được một ngoại lệ.
Bạn cần .NET 3.5 SP1 để sử dụng API quản lý tài khoản. Ngoài ra, bạn có thể muốn chú ý đến điều này hotfix. API AccountManagement có một số lỗi nếu chạy trong một số môi trường. Bạn có thể cần phải áp dụng các hotfix.
Nguồn
2011-01-14 06:23:23
Bạn có nghĩa là người dùng (và máy của bạn) đang chạy ứng dụng biểu mẫu của bạn đang ở trong một miền không đáng tin cậy khác hoặc hoàn toàn không nằm trong miền? Bạn có ý nghĩa gì đối với Đăng nhập Windows? Bạn thực sự có thể viết hộp thoại của riêng bạn để nhắc người dùng nhập tên người dùng và mật khẩu của mình. Sau đó, bạn sử dụng thông tin đăng nhập miền của mình để nói chuyện với Active Directory. –
Đúng. một số máy không có trên miền. Tôi có thể tìm thông tin về thông tin đăng nhập qua hộp đăng nhập tùy chỉnh ở đâu? Tôi đã thử, tôi có thể xác thực nhưng không nhận được thông tin thành viên. Tôi đã theo dõi http://support.microsoft.com/kb/326340 –
Bất kỳ nhận xét nào về câu trả lời được đề xuất của tôi? Nó làm việc cho bạn? –