本記事では、ユーザがロックアウト、初回パスワード変更が必要などのステータスにより、UserPrincipal.SetPassword, UserPrincipal.ChangePassword, PrincipalContext.ValidateCredentials の成否がどのようになるのかをまとめました結果を掲載します。
System.DirectoryServices.AccountManagement 名前空間のクラスを使用していますが、SetPassword, ChangePassword はDirectoryEntry.Invoke メソッドでSetPassword, ChangePassword を行うことと同じです。ValidateCredentials は 単純にユーザのアカウント、パスワードを使用して、ActiveDirectoryのバインドする ( DirectoryEntry オブジェクトを作成する) のと同じことです。
確認環境
- Windows Server 2003 AD環境
 - .NET 3.5
 
1. ユーザ状態によるパスワード変更、検証の結果
正しいユーザアカウント、パスワードを入力する条件で、アカウントのステータスによる、ChangePassword, SetPassword, ValidateCredentials の成否を表にまとめます。
| ユーザ状態 | SetPassword | ChangePassword | ValidateCredentials | 備考 | 
| ロックアウト | 成功(※) | 失敗 | 失敗 | ※ロックは解除されない | 
| 初回パスワード変更が必要 | 成功 | 成功 | 失敗 | |
| 
             アカウントは無効  | 
            成功 | 成功 | 失敗 | |
| パスワード期限切れ | 成功 | 成功 | 失敗 | |
| ユーザはパスワードを変更できない | 成功 | 失敗 | 成功 | |
| パスワードを無期限にする | 成功 | 成功 | 成功 | 
SetPassword は管理者権限(サーバオペレータ権限でもOKだと思います)が必要です。ChangePassword は旧パスワードがあっていれば、管理者権限を持たなくともパスワードを変更できます。
2. まとめ
備忘録としてユーザのステータスによるパスワード変更、ユーザ検証結果をまとめました。
誤り指摘点などがありましたらご連絡ください。
                            
                            
                            
さんのコメント: さんのコメント: