本記事では、ユーザがロックアウト、初回パスワード変更が必要などのステータスにより、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. まとめ

備忘録としてユーザのステータスによるパスワード変更、ユーザ検証結果をまとめました。

誤り指摘点などがありましたらご連絡ください。