2011-04-28 4 views
0

Nous utilisons ASP.NET MVC et le fournisseur d'AdMembership pour la connexion, et pour diverses raisons, nous avons dû implémenter notre propre fonctionnalité «Changer le mot de passe lors de la prochaine connexion».Ad Modification d'un mot de passe Asp.Net

Nous avons également une exigence de ne pas autoriser plus d'un changement par 24 heures. Donc, il est mis en place de cette façon dans AD. Ce que nous devons faire est d'ignorer cette exigence lors de la réinitialisation d'un mot de passe par défaut, nous voulons que l'étudiant soit obligé de changer le mot de passe lors de la prochaine connexion, même si c'est avant 24 heures.

voici mon coup de poignard. Fondamentalement, je veux changer la propriété PwdLastSet à une valeur de plus de 24 heures après avoir réinitialisé le mot de passe.

if (bSetToDefault) 
    { 
     var adDate     = userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ]; 
     DateTime passwordLastSet = DateTime.FromFileTime((Int64) adDate); 
     passwordLastSet    = System.DateTime.Now.AddHours(-25); 
     long filetime    = passwordLastSet.ToFileTimeUtc(); 
     userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ] = filetime; 
    } 

Mais je continue à obtenir nulle retour même quand je sais le mot de passe de l'utilisateur a été modifié.

Quelqu'un at-il des conseils ou des suggestions? Suis-je dans la mauvaise propriété?

Répondre

1

hmm cet attribut est répliqué et devrait donc toujours être disponible. Essayez le script de ligne de commande pour voir si elle apparaît:

http://www.rlmueller.net/PwdLastChanged.htm

Il est possible parce que sa date de 64bit et ne pas faire une conversion? Essayez le script et voyez si cela fonctionne. Si c'est le cas, regardez la procédure Integer8Date pour votre conversion de date. Si vous utilisez System.DirectoryServices.AccountManagement, il existe une méthode exposée permettant à l'utilisateur principal d'expirer le mot de passe immédiatement.

+0

Cela l'a produit, et j'ai utilisé le code là-bas pour l'obtenir, mais comment puis-je le définir? Merci. –

+0

Vous ne pouvez pas - vous ne pouvez définir que 0 (expire maintenant) ou -1 (réinitialiser le lien à droite maintenant) –

0

Donc, il sera aussi facile que de l'appeler comme oUserPrincipal.ExpirePasswordNow(); pour plus d'informations sur l'utilisation s'il vous plaît voir this article.

+0

Si je fais cela, ils ne peuvent pas se connecter du tout. –

+0

Etes-vous sûr? Parce que cette méthode expirera le mot de passe et quand ils se connecteront, ils demanderont à changer. Dans la documentation MS, il est défini comme "Expire le mot de passe pour ce compte, ce qui forcera l'utilisateur à changer son mot de passe lors de la prochaine connexion." – Raymund

+0

Les contrôles que j'utilise ne supportent pas de changer le mot de passe avant de nous connecter, je ne me souviens pas pourquoi, ça fait longtemps que je me suis trompé, mais nous ne pouvions pas le faire fonctionner. c'est un contrôle d'ouverture de session asp.net qui a été configuré pour le dérouler en plusieurs contrôles en html. le contrôle de mot de passe de changement, n'a pas, sauf si vous étiez connecté. –

Questions connexes