2

アカウントで「ユーザーは次回のログイン時に変更する必要があります」がチェックされていない場合は、パスワードを変更できます。
ただし、このチェックボックスをオンにすると、ユーザーにアクセスしようとしたときに不正なパスワードエラーが発生します。

LogOnUser()は正しいエラーコードを返すので、ユーザーはパスワードを変更する必要があります。
Joe Kaplanがここで述べているように(2004年にさかのぼります)、パスワードを変更できるようにユーザーをバインドすることはできません。

AccountManagement/PrincipalContextまたはDirectoryEntry/DirectorySearcherのどちらを使用しても同じ問題です。

4

1 に答える 1

2

私は最後の位置でプロジェクトでこれを行いました。独自の資格情報を使用してユーザーにバインドしようとするのではなく、パスワードを変更する権限のみを持つ AD アカウントをセットアップしました。

そのため、ユーザーがパスワードを変更する必要があることを示すエラー コードを取得したら、新しいパスワードを要求し、ユーザーを管理者として取得して、変更を行います。

思い出すと、コードが実行されている資格情報に依存するのではなく、管理者のユーザー名とパスワードを明示的に渡して機能させる必要がありました。

セキュリティのために、制限付きの管理者ユーザー名とパスワードの暗号化されたコピーをレジストリに保存し、呼び出し時に復号化しました。

コードは次のようになります。

        PrincipalContext dc = new PrincipalContext(ContextType.Domain, 
            "www.yourdomain.com", "dc=yourdomain,dc=com", 
            ContextOptions.SimpleBind, "AdminUserName", "AdminPassword");
        UserPrincipal usr = UserPrincipal.FindByIdentity(dc, 
            "UserWhoNeedsPasswordChanged");
        usr.ChangePassword("oldPass", "newPass");
于 2012-05-14T17:48:40.730 に答える