2010-10-07 6 views
5

Sto scrivendo una funzione per un'app Web in ASP.NET in cui il client accede al computer server, che è autenticato da Windows contro gli utenti locali sul server. La funzione che sto scrivendo resetta la password degli utenti e li invia a quelli nuovi. Lo faccio in questo modo:Forza l'utente locale a modificare la password all'accesso successivo con C#

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

Come posso controllare anche la bandiera per forzare l'utente a modificare la password al successivo accesso con la password via email a loro? Ho provato ad utilizzare pwdLastSet in questo modo:

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

Ma questo funziona apparentemente solo con LDAP, non WinNT, e sto facendo questo a livello locale.

Gli esperti conoscono meglio di me? Ho anche provato a cercare un modo per farlo attraverso la linea di comando in modo che io possa semplicemente creare un processo, ma non sono stato in grado di trovare un modo per farlo in quel modo.

risposta

6

Per WinNT, è necessario impostare il valore su 1 anziché su 0 e il nome della proprietà è "PasswordExpired" anziché "pwdLastSet"; vedi http://msdn.microsoft.com/en-us/library/aa746542(VS.85).aspx

In altre parole, fare questo per WinNT:

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

(È confuso, lo so, ma per LDAP è necessario impostare la proprietà "pwdLastSet" a 0. Come quello di incoerenza!)

Problemi correlati