2 に答える
端的に言えば、セキュリティの問題です。AD-LDS への接続が SSL 経由で確立されていない限り、パスワードを扱うすべてが頭の痛い問題です。
最初の問題 (以下を参照) の解決策を見つけた後、SSL を使用しない構成から生じるすべての問題を解決しようとするよりも、証明書を使用して AD-LDS をインストールする方がはるかに効率的であるという結論に達しました (開発中)。したがって、AD-LDS を使用したいすべての人に、開発証明書をインストールするという追加作業を行うことをお勧めします。これを行うことの複雑さは、SSL なしで発生するすべての問題を回避することの複雑さをはるかに下回っています。グーグルで調べた後、Windows SDKのmakecert-programmで必要な証明書を作成してインストールすることができました。
とにかく解決策に興味がある人のために:
AD-LDS とその認証方法について多くのことを読んだ後、SSL なしで UserPrincipal クラスでパスワードを設定することは不可能であることを理解しています。回避策として、DirectoryEntry クラスを使用して、LDAP 経由で SetPassword メソッドを呼び出すことができます。ただし、パラメータ化が必要です。
const long ADS_OPTION_PASSWORD_PORTNUMBER = 6;
const long ADS_OPTION_PASSWORD_METHOD = 7;
const int ADS_PASSWORD_ENCODE_CLEAR = 1;
directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR});
directoryEntry.Invoke("SetPassword", new object[] { "MyPassword" });
さらに、dsmgmt-command line ツールを使用して、保存されていないパスワード通信を許可する必要があります。
何が起こっているかについての理解は、本のオンライン プレビューから得たものでした.Net 開発者向けディレクトリ サービス プログラミング ガイドおそらくもう必要ない本ですが、著者に寄贈するよう注文しました。彼は何時間もの検索を節約してくれました。 . 古い本ですが、AD LDS (ADAM) についての非常に優れた説明が含まれており、現在でも有効です。