2011-02-14 77 views
4

我一直在使用System.DirectoryService(ADSI)類和方法在Active Directory中創建和更改用戶。以編程方式確定AD密碼策略

最近我們增加了一項功能,允許用戶通過系統設置自己的密碼。但是,密碼策略集未接受密碼時,使用SetPassword方法會引發異常。

userEntry.Invoke("SetPassword", new object[] {password}); 

我的問題是:我如何檢查,看是否有密碼,不辜負密碼策略,嘗試使用SetPassword法過嗎?

我在this post中讀到,您可以從根域節點獲取密碼策略設置,但我可以在哪裏瞭解每個屬性的含義?例如,哪些字符需要滿足「複雜性」策略?

一旦我知道了這一點,我可以實現自己的密碼檢查方法,但由於這是一個容易出錯的方法,所以我寧願使用內置檢查併爲用戶提供相應的信息,說明他們的錯誤密碼。

+0

您是否找到了一個很好的解決方案?我正在爲驗證做一個解決方案(http://stackoverflow.com/questions/5060251/validate-new-ad-password-according-to-local-security-policy),所以能夠查找當前的策略非常有用。 –

回答

0

的複雜性策略是,它必須包含三個出的這些類型五:

  • 大寫字母
  • 小寫字母
  • 位數
  • 非字母數字字符:〜!@ #$%^ & * _- + =`|(){} []:;''<>,。?/
  • Unicode字符是字母,但不是大寫或小寫

它也不能是sAMAccountName或displayName(或其部分)。你可以閱讀它here。其他密碼策略規則在adjacent documents

你可以嘗試設置它並捕獲異常,但從內存中我不認爲它告訴你什麼是密碼錯誤,只是它不符合要求。

2

我正在研究類似的項目。我們正在推出一個忘記密碼的應用我最終做了一個Invoke("SetPassword", "[randomString]")並保存了Invoke("ChangePassword","[randomString]","[user supplied pw]")的隨機字符串。 ChangePassword的結果已返回給用戶。

SetPassword不檢查密碼的複雜性或歷史規則。與在AD中右鍵單擊用戶並選擇「重置密碼」相同。然而,ChangePassword並沒有檢查密碼歷史記錄的要求。