dans Active Directory, si le compte d'utilisateur est désactivé puis activé, par défaut, l'utilisateur doit modifier leur mot de passe sur la première connexion. J'ai du mal à pouvoir détecter cette programmabilité en utilisant c #? Existe-t-il une propriété qui est définie ou quelque chose le long de ces lignes si un utilisateur doit réinitialiser leur propriété?
dire que j'ai un Y a-t-il une propriété que je peux utiliser: p> direcotryenterry code> point pointant sur un utilisateur: p>
4 Réponses :
La condition est stockée dans deux attributs: p>
de ici a>. p>
Voici ce que j'ai écrit pour faire cela. Ne répondez pas exactement à votre question, mais utile aux autres qui la lisent plus tard.
Les bits importants sont originaires de la principaleContext. Tous les trucs ci-dessus, c'est comme ça que j'ai essayé de toujours récupérer l'adname avec la capitalisation correcte exacte. P>
Remarque Ceci est juste que le code fait la première réponse, testez LastPasswordset à la place d'un utilisateur de l'utilisateur au lieu d'une DE. P>
ERIC - P>
private bool TestAdShouldChangePassword( string adUser ) { try { string adName = ""; MembershipUser mu = Membership.GetUser( adUser ); if ( mu != null ) { IStudentPortalLoginBLL splBll = ObjectFactory.GetInstance< IStudentPortalLoginBLL >(); adName = splBll.GetCleanAdName( adUser );// I wrote this is just pulls outhe name and fixes the caplitalization - EWB PrincipalContext pctx = new PrincipalContext( System.DirectoryServices.AccountManagement.ContextType.Domain ); UserPrincipal p = UserPrincipal.FindByIdentity( pctx, adName ); if ( p == null ) return false; if ( p.LastPasswordSet.HasValue == false && p.PasswordNeverExpires == false ) { return true; } } } catch ( MultipleMatchesException mmex ) { log.Error ( "TestAdShouldChangePassword( ad user = '" + adUser + "' ) - Exception finding user, can't determine if ad says to change password, returing false : Ex = " + mmex.ToString() ); } return false; }
Impressionnant. Je vais essayer cela en ce moment. Question cependant, quelles références cela utilisez-t-il?
Système.directoryservices.accountmanagement; en utilisant system.security.Authentication; Utiliser System.Web.Sécurité; Je n'ai pas besoin de laquelle de ceux-ci il a besoin de bon escient, mais ma meilleure hypothèse est juste s.ds.am
a pu l'obtenir à l'aide du code suivant:
private static Int64 ConvertADSLargeIntegerToInt64(object adsLargeInteger) { var highPart = (Int32)adsLargeInteger.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); var lowPart = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); return highPart * ((Int64)UInt32.MaxValue + 1) + lowPart; }
var username = "radmin"; var adContext = new PrincipalContext(ContextType.Domain, adLocation, adContainer, adAdminUsername, adAdminPassword); var user = UserPrincipal.FindByIdentity(adContext, username); Console.WriteLine(user.LastPasswordSet); If LastPasswordSet has a null value, the "user must change password at next logon".
Je souhaite que L'utilisateur ne change pas de mot de passe à la prochaine connexion B>. comment code>?