まず第一に、私はインフラストラクチャの人ではなく、開発者です。重要な情報を省略している場合は、すみません。次のことが可能かどうか、可能であればどのように進めるかを判断する必要があります。
ユーザーがActiveDirectoryパスワードを変更したら、それをMIT Kerberosに同期し直したいと思います。
AD側からは、パスワードの変更時に実行できる Password Filters というものがあることがわかります。しかし、私はKerberosについて何も知りません。プログラムでユーザーパスワードを何かに変更することは可能ですか?もしそうなら、C#を使用できますか?または、JavaまたはC++である必要がありますか?
どんな助けでも大歓迎です。コメントありがとうございます。
ユーザーがActiveDirectoryパスワードを変更したら、それをMIT Kerberosに同期し直したいと思います。
現在の形式では、これはステートメントが曖昧すぎて、実際に1回で答えることはできません。
Active DirectoryからサードパーティのKDC(キー配布センター/データベース)へのパスワードの送信または「同期」は、Kerberosの動作の一部ではありません。また、それを行う正当な理由も考えられません。これまで。
Active Directoryは、一貫性の低いデータベースレプリケーションモデルを使用して、ユーザー名とパスワードのデータベース(およびその他の多くのデータベース)が同期され、あるドメインコントローラー(KDC)から次のドメインコントローラー(KDC)まで最新の状態に保たれるようにします。言うまでもなく、MIT Kerberos KDCはそのレプリケーションに参加できません(少なくとも、専門家組織にふさわしいサポート可能な方法ではありません)。
あなたが説明していることを達成することは技術的に実現可能ですが非常に賢明ではありません。
プログラムでユーザーパスワードを何かに変更することは可能ですか?
もちろん。 Active Directory内のユーザーのパスワードは、権限があれば、いつでも好きなときに管理上リセットできます。これは、ネイティブコードまたはマネージコードのいずれかで実行できます。簡単な例を次に示します。
using (var context = new PrincipalContext( ContextType.Domain ))
{
using (var user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, userName ))
{
user.SetPassword( "newpassword" );
// or
user.ChangePassword( "oldPassword", "newpassword" );
user.Save();
}
}
主な違いは、ユーザーのパスワードを「変更」するには、ユーザーの現在のパスワードを知っている必要があるということです。ユーザーのパスワードの「リセット」は、ユーザーの現在のパスワードを知らなくても実行できますが、管理者権限が必要です。
ただし、ActiveDirectoryから非ADデータベースにパスワードを同期するという元の質問とは何の関係があるのかわかりません。
AD側からは、パスワードフィルターと呼ばれるものがあることがわかります
パスワードフィルターは、ネイティブ(CまたはC++)コードでのみ開発できます。マネージコードは許可されていません。パスワードフィルターは、すべてのドメインコントローラーのLsassプロセスに読み込まれるモジュールです。 lsass.exeでクラッシュが発生すると、ドメインコントローラー全体がダウンするため、開発を計画している場合は、Extreme注意が必要です。また、パスワードフィルタが原因でいずれかがクラッシュした場合は、同じパスワードフィルタも実行しているため、おそらくすべてがクラッシュします。また、すべてのドメインコントローラーが同時にクラッシュすると、会社全体がダウンします。
はい、理論的にはパスワードフィルターを使用できます。パスワードフィルターは、発生したすべてのパスワード変更をテキストファイルまたは別のデータベースに記録できます。または、ネットワークを介してパスワードを別のサーバーに送信することもできます。パスワードの送信と保護をどのように選択するかは、完全にあなた次第です。少なくともTLSを使用することをお勧めします。パスワードをプレーンテキストで送信または保存すると、地獄であなたを見つけて自分で拷問することを誓います。
(その最後の部分については冗談です。)