- PR -

【C#】ログオンユーザのパスワードの取得法

投稿者投稿内容
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2005-11-01 11:58
いつもお世話になっております、

>現在、検証可能な環境がないので試せませんが、
>DirectoryEntryのコンストラクタに
>AuthenticationTypes列挙体を指定するものあります。
>この列挙体のSecureフラグがご希望のもののような気がします。

求めていたものは、この類のものです。
MSDNを探ってみます。
進展があったら、また書き込んでみます。
(別件の作業中なので、時間がかかるかもしれません...)

>パスワードがnull参照の場合は、元スレッドの
>セキュリティコンテキストを使用してくれるそうです。

これって、『指定しなければ、勝手にWin認証で接続に行く』
的なことと捉えてOKなんでしょうか?

なお、私もAD環境を作成しながらプログラムを書いているので、
@AD環境設定がミスっていて動作しない
のか
Aプログラムの実装が間違っていて動作しない
のか、現時点では切り分けできていません...

以上、ありがとうございました。
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2005-11-04 10:17
いつもお世話になっております、

ADへWin認証で接続する件ですが、
下記のように実装したところ正常に情報を取得できました。

ご指摘頂いたAuthenticationTypes.Secureを下記のように指定すればで良いようです。

DirectoryEntry drEntry = new DirectoryEntry( ADpath,null, null);
drEntry.AuthenticationType = AuthenticationTypes.Secure;

現環境は構築中で、Win2003サーバ上からadmin権限を持っているユーザで
実施していますが、おそらくこのアプローチで良いんだと思います。

※あとは運用として下記をどう考慮しようかといったところです。

1.ADでのユーザ権限の設定
2.フォレストが複数あった場合の構成での運用法

とりあえず、ご報告まで。
多数のアドバイス、ありがとうございました。

下記にサンプルコードを示します。

〜〜〜サンプルコード〜〜〜

string ADpath = "LDAP://ServerName";

DirectoryEntry drEntry = new DirectoryEntry( ADpath,null, null);
drEntry.AuthenticationType = AuthenticationTypes.Secure;

Object obj = drEntry.NativeObject;

// LDAP検索オブジェクトを作成
DirectorySearcher drSearch = new DirectorySearcher(drEntry);

// アカウントフィルターを設定
drSearch.Filter = "(SAMAccountName=*)";

// Common Name(cn)プロパティを同時に
// 取得するように設定
drSearch.PropertiesToLoad.Add("cn");

// 検索する
SearchResultCollection scn = drSearch.FindAll();
if( scn == null)
{
MessageBox.Show("対象ユーザーがいません。");
return;
}

foreach( SearchResult sResult in scn)
{
MessageBox.Show((string)sResult.Properties["cn"][0]);
}

〜〜〜〜〜〜〜

スキルアップ/キャリアアップ(JOB@IT)