c# - 域名和主机名可以相同吗

标签 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 的链接也证实了这一点

现在的问题是,如果“域名”和“机器名”相同怎么办? 或者 是否有可能与域名同名的机器可以加入域?

如果这是真的,是否有可能通过在这个简单的解决方案中添加一些东西来反查

最佳答案

我敢打赌,如果当前登录的用户没有登录到某个域,则他或她没有可分辨名称。使用 GetUserNameEx使用 EXTENDED_NAME_FORMAT 类型 NameFullyQualifiedDN (1)。

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

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

关于c# - 域名和主机名可以相同吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593233/

相关文章:

c# - 当 #if DEBUG 运行时

php - 登录或返回链接 url 后确保返回上一页的最佳做法

sql-server - SQL Server 2005 用户映射到底是什么?

c# - ZXing Barcode ImageView不显示生成的条形码Xamarin Forms

c# - ASP.Net Core + Swagger - 操作需要 Swagger 2.0 的显式 HttpMethod 绑定(bind)

c# - 以编程方式在 Microsoft RemoteApp 中查找子窗口

java - 通过质询/响应保护 session 的每个请求?

C#发送POST请求并接收303状态码

c# - 使用 Thread.Sleep,同时使用程序

.net - 可以全屏运行 VB 应用程序吗?