2014-09-02 57 views
0

根据Microsoft文档NetValidatePasswordPolicy有可能实现功能来检查密码历史记录并避免重复使用以前的密码。我已经浏览了这个API的所有例子,但其中没有一个为我提供了如何检查密码历史的功能。有人可以指导我如何验证密码历史?使用NetValidatePasswordPolicy验证以前散列密码的密码

public static NET_API_STATUS ValidatePassword(string password) 
    { 
     var outputArgs = new NET_VALIDATE_OUTPUT_ARG(); 
     var inputArgs = new NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG(); 
     var passwordHistory = new NET_VALIDATE_PASSWORD_HASH(); 

     IntPtr inputPointer = IntPtr.Zero; 
     IntPtr outputPointer = IntPtr.Zero; 

     try 
     { 

      inputArgs.PasswordMatched = true; 
      inputArgs.ClearPassword = Marshal.StringToBSTR(password); 
      //var serverName = System.Environment.MachineName; 
      string userNameToCheck = @"usr"; 
      //inputArgs.ClearPassword = Marshal.StringToBSTR(password); 
      inputArgs.UserAccountName = userNameToCheck; 

      // If using a secure string 
      ////inputArgs.ClearPassword = Marshal.SecureStringToBSTR(secureStringPassword); 

      inputPointer = Marshal.AllocHGlobal(Marshal.SizeOf(inputArgs)); 
      Marshal.StructureToPtr(inputArgs, inputPointer, false); 

      NET_API_STATUS status = NetValidatePasswordPolicy("serverdc1", IntPtr.Zero, NET_VALIDATE_PASSWORD_TYPE.NetValidatePasswordChange, inputPointer, ref outputPointer); 

      if (status == NET_API_STATUS.NERR_Success) 
      { 
       outputArgs = (NET_VALIDATE_OUTPUT_ARG)Marshal.PtrToStructure(outputPointer, typeof(NET_VALIDATE_OUTPUT_ARG)); 
       NET_VALIDATE_PASSWORD_HASH OutPasswordHistory = new NET_VALIDATE_PASSWORD_HASH(); 
       OutPasswordHistory.Hash = outputArgs.ChangedPersistedFields.PasswordHistory; 
       OutPasswordHistory.Length = outputArgs.ChangedPersistedFields.PasswordHistoryLength; 

       // Copy the Structure to the IntPtr 

       if (outputArgs.ValidationStatus == NET_API_STATUS.NERR_Success) 
       { 
        // Ok 
        string emtp; 
       } 

       return outputArgs.ValidationStatus; 
      } 
      else 
      { 
       return status; 
      } 
     } 

回答

0

我不相信你可以要求测试的政策的具体组成部分 - 只是政策与提供的密码的总和。

+0

如果整个政策得到验证,对我来说没问题,但我没有收到有关密码历史记录政策的错误。我附上了我使用的代码。 – mikola 2014-09-03 06:51:15