1

最近、「現在ログインしているユーザーがドメインの一部であるかどうかを判断する方法」という質問に対する答えを見つけようとしていました

Stackoverflow で、上記の使用法を含むかなりまともな答えを見つけました

using System.Security.Principal;
using System.DirectoryServices.AccountManagement;

しかし、私はまた、次のような簡単な解決策を見ています

System.Environment.UserDomainName; - gives name of the current user's domain name.
System.Environment.MachineName;    - gives name of the machine.

上記の 2 つが同じでない場合、ユーザーは UserDomainName によって返されるドメインの一部であることを意味します

MSDNのこのリンクでも確認されています

ここで問題は、「ドメイン名」と「マシン名」が同じ場合はどうなるかということです。または ドメイン名とまったく同じ名前のマシンがドメインに参加できる可能性はありますか?

これが本当なら、この単純な解決策に何かを追加することで、これに対抗する可能性はありますか?

4

1 に答える 1

4

現在ログオンしているユーザーがドメインにログオンしていなければ、識別名を持っていないに違いありません。タイプ(1)でGetUserNameExを使用します。EXTENDED_NAME_FORMATNameFullyQualifiedDN

値が返された場合、現在のユーザーがドメインにログオンしていることがわかります。ただし、この関数を呼び出すと、プログラムが予期せず一定期間ブロックされる可能性があります。この関数は、何らかの Active Directory サービスへの接続を試行し、最終的に失敗するかタイムアウトする可能性があるため、おそらく非同期で呼び出す必要があります。

これを達成するためのさらに回復力のある方法は、アカウント SID を調べて、EqualPrefixSidそれをマシンと比較できるかどうかを確認することです。この場合、現在のアカウントがマシンに対してローカルである (つまり、ドメイン内にない) ことがわかります。これは、ネットワークを横断してタイムアウトを待つ必要がないため、より直接的なアプローチです。興味深いことに、マシン名がユーザー ドメインと同じ場合、Windows はログオンしたいドメインがローカル マシンであると想定する必要があるため、実際のドメインにログオンすることはほとんど不可能であることも意味します。マシン名は実際にはドメインと同じです。

于 2013-02-19T13:43:23.637 に答える