経由で Active Directory からグループを取得する際に問題が発生していますSystem.DirectoryServices
当初、ドメインに登録されたコンピューターでアプリケーションを開始しましたが、これはライブ ドメインであり、AD への書き込みを一切行いたくなかったため、ホスト オペレーティング システムとして Windows XP を搭載したマシンをセットアップしました。 、および VM に Windows Server 2003 をインストールしました。
マシンに別のイーサネット ポートを追加し、スイッチをセットアップしました。1 つのイーサネット ポートは VM 専用で、もう 1 つのポートはホストに使用されます。
通信できるように IP アドレスを構成した後、アプリケーションをホスト マシンに転送して起動しましたが、DirectoryServicesCOMException
.
ユーザー名とパスワードが無効であるというメッセージが表示されました:(アクティブディレクトリではないことを確認するためだけに、3番目の仮想マシンを作成し、Windows XPをインストールしました.APPでテストされた資格情報を使用してドメインに追加しました。 .
そのため、アプリケーションが実行されているマシンがドメインの一部ではないためだと思いました。
問題の原因となったコード ブロックは次のとおりです。
public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
//Validate the Domain!
try
{
PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
_IsValidDomain = true;
//Test the user login
_IsValidLogin = Context.ValidateCredentials(Username, Password);
//Check the Group Admin is within this user
//******HERE
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
foreach(Principal Result in Results)
{
if (Result.SamAccountName == "Domain Admins")
{
_IsAdminGroup = true;
break;
}
}
Results.Dispose();
Context.Dispose();
}
catch (PrincipalServerDownException)
{
_IsValidDomain = false;
}
}
ログイン ダイアログの情報は次のように入力されます。
Domain: test.internal
Username: testaccount
Password: Password01
誰かがこのエラーに光を当ててくれることを願っています。
アップデート:
サーバーのセキュリティ ログを確認すると、ログイン試行が成功したことがわかりますが、これは次のことが原因です。
_IsValidLogin = Context.ValidateCredentials(Username, Password);
グループをチェックしている行の後の行がエラーを引き起こしているため、主な問題は、ネットワークに参加していないマシンから以下のコード行が正しく機能しないことです。
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);