2010-10-07 23 views
5

J'écris une fonction pour une application web dans ASP.NET où le client se connecte au serveur, qui est authentifié par Windows par rapport aux utilisateurs locaux sur le serveur. La fonction que j'écris réinitialise le mot de passe des utilisateurs et leur envoie un courriel. Je le fais comme ceci:Force l'utilisateur local à modifier le mot de passe lors de la prochaine connexion avec C#

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

Comment puis-je vérifier aussi le drapeau pour forcer l'utilisateur à changer son mot de passe la prochaine fois qu'ils se connectent avec le mot de passe envoyé par courriel pour eux? J'ai essayé d'utiliser pwdLastSet comme ceci:

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

Mais cela fonctionne apparemment uniquement avec LDAP, non WinNT, et je fais cela sur place.

Les experts connaissent-ils mieux que moi? J'ai même essayé de trouver un moyen de le faire à travers la ligne de commande pour que je puisse créer un processus, mais je n'ai pas réussi non plus à trouver un moyen de le faire.

Répondre

6

Pour WinNT, vous devez définir la valeur sur 1 plutôt que sur 0, et le nom de la propriété est "PasswordExpired" au lieu de "pwdLastSet"; voir http://msdn.microsoft.com/en-us/library/aa746542(VS.85).aspx

En d'autres termes, faire pour WinNT:

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

(Il est source de confusion, je sais, mais pour LDAP vous devez définir la propriété « pwdLastSet » à 0. Comment est-ce pour l'incohérence!)