2014-09-02 3 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

Смежные вопросы