域名和主机名是否相同

时间:2013-01-29 22:28:22

标签: c# .net security active-directory windows-authentication

最近,我试图找到问题的答案“如何确定当前登录用户是否属于域名”

在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.

如果上述两个不相同,则表示用户是UserDomainName返回的域的一部分

很公平,也通过MSDN

的链接确认

现在的问题是如果“域名”和“机器名称”相同怎么办? 要么 具有与域名完全相同名称的计算机是否可以加入域?

如果这是真的,是否有可能通过向这个简单的解决方案添加内容来反击检查

1 个答案:

答案 0 :(得分:4)

我敢打赌,如果他或她没有登录到域,则当前登录的用户没有名字。将GetUserNameExEXTENDED_NAME_FORMAT类型NameFullyQualifiedDN(1)一起使用。

如果您返回值,则表示当前用户已登录到域。但是,调用此函数可能会在一段时间内意外阻止您的程序。您可能希望以异步方式调用此函数,因为它可能会尝试连接到某些Active Directory服务,并最终失败或超时。

实现此目的的更具弹性的方法是查找帐户SID并检查EqualPrefixSid是否可以将其与计算机进行比较。如果是这种情况,那么您知道当前帐户是机器的本地帐户(即不在域中)。这不涉及穿越网络并等待超时,因此这是一种更直接的方法。有趣的是,它还意味着如果计算机名称与用户域相同,则Windows必须假定您要登录的域是本地计算机,因此如果登录到实际域,则几乎不可能机器名称实际上与域名相同。