2

Active Directory ユーザー アカウントへの読み取りおよび書き込みアクセスを許可する C# Web アプリケーションに取り組んでいます。

私はこれを私たちの主要な会社の AD でうまく機能させています。アカウントの読み取り、属性の取得、AD への詳細の保存、アカウントの有効化/無効化などを行うことができます。これを行うために偽装を使用しているため、AD に保存する直前に変更されます別のアカウント (Domain Admins に属する) を使用するように変更し、保存後にメインのアプリ プール アカウントに戻します。

アプリを介してユーザー アカウントを追加する必要がありましたが、メインの AD でこれをテストすることに満足していないため、テスト AD を使用して VM をセットアップしました。その VM でアプリをセットアップしましたが、AD から正常に読み取ります。ライブ AD で偽装するのと同じユーザー アカウントをセットアップし、それをドメイン管理者グループに追加しました。ただし、詳細を既存のユーザーに保存しようとすると、「アクセスが拒否されました」というエラーが表示されます。

保存する直前に結果を出力したため、なりすましが機能していることはわかっています。パスワードを変更しようとすると、別のエラーで失敗しました。

ネットワーク管理者に、ライブ AD の偽装ユーザーに何か特別な設定を行っているかどうか尋ねましたが、彼はそうではないと言い、それらは同一のようです。

偽装ユーザーをドメイン管理者グループに追加する以外に、他に何かする必要があることを知っている人はいますか? ユーザーとして VM にログインしようとしましたが、AD 自体を介してユーザー アカウントを変更したため、ユーザーは必要なレベルのアクセス権を持っているようです。

以下は、ユーザーになりすますために使用しているコードです。

Impersonation imp = new Impersonation();
string impResult = "";
imp.ImpersonateDomainUser(out impResult, ConfigurationManager.AppSettings["ADAdminUserLogin"], user.Domain, ConfigurationManager.AppSettings["ADAdminUserPwd"]);
...

imp.Revert();

impResult以下を返します。

Before impersonation: NT AUTHORITY\SYSTEM 
After impersonation: TESTDOMAIN\user.manager.service

ADに保存するために使用しているコードは次のとおりです。

var entry = new DirectoryEntry();
var account = userName.Replace(domain, "");

var search = new DirectorySearcher(entry) { Filter = "(SAMAccountName=" + account + ")" };
search.PropertiesToLoad.Add(propertyName);

var result = search.FindOne();

if (result != null)
{
   DirectoryEntry entryToUpdate = result.GetDirectoryEntry();

   if (propertyValue == null || propertyValue.ToString().Length == 0)
      entryToUpdate.Properties[propertyName].Clear();
   else
      entryToUpdate.Properties[propertyName].Value = propertyValue;

   entryToUpdate.CommitChanges();

   entryToUpdate.Close();
   entryToUpdate.Dispose();
}

アドバイスをいただければ幸いです。

4

1 に答える 1

3

この問題は、仮想マシンのユーザー アクセス制御設定に起因していました。

コントロール パネルからユーザー アクセス制御を無効にすると、ユーザーを Active Directory に保存できるようになりました。私はこれを試していませんが、管理者としてブラウザを実行することもできた可能性があります。

于 2013-01-03T16:10:38.550 に答える