2010-10-07 19 views
5

Tôi đang viết một chức năng cho ứng dụng web trong ASP.NET nơi máy khách đăng nhập vào máy chủ, Windows được xác thực với người dùng cục bộ trên máy chủ. Hàm tôi đang viết sẽ đặt lại mật khẩu người dùng và gửi email cho họ bằng mật khẩu mới. Tôi làm như vậy:Buộc người dùng cục bộ thay đổi mật khẩu tại lần đăng nhập tiếp theo với C#

String userPath = "WinNT://" + Environment.MachineName + "/" + username.Text; 
DirectoryEntry de = new DirectoryEntry(userPath); 
de.Invoke("SetPassword", new object[] { password }); 

Làm cách nào để kiểm tra cờ buộc người dùng phải thay đổi mật khẩu vào lần đăng nhập bằng mật khẩu được gửi qua email? Tôi đã thử sử dụng pwdLastSet như vậy:

de.Properties["pwdLastSet"].Value = 0; 

Nhưng điều này dường như chỉ hoạt động với LDAP chứ không phải WinNT và tôi đang làm việc này tại địa phương.

Bất kỳ chuyên gia nào biết tốt hơn tôi? Tôi thậm chí đã cố gắng tìm cách để làm điều này thông qua dòng lệnh để tôi có thể tạo ra một Process, nhưng tôi cũng không thể tìm ra cách để thực hiện nó theo cách đó.

Trả lời

6

Đối với WinNT, bạn phải đặt giá trị thành 1 thay vì 0 và tên thuộc tính là "PasswordExpired" thay vì "pwdLastSet"; thấy http://msdn.microsoft.com/en-us/library/aa746542(VS.85).aspx

Nói cách khác, làm điều này cho WinNT:

de.Properties["PasswordExpired"].Value = 1; 

(Đó là khó hiểu, tôi biết, nhưng đối với LDAP bạn cần phải thiết lập thuộc tính "pwdLastSet" để 0. Làm thế nào của đó cho mâu thuẫn!)

Các vấn đề liên quan