如何以username @ domain格式获取当前Windows用户的名称?

Ton*_*ile 9 c# windows security active-directory windows-identity

我知道以下函数以domain\username格式返回当前Windows用户的名称.

Convert.ToString( WindowsIdentity.GetCurrent().Name );
Run Code Online (Sandbox Code Playgroud)

但是如何以username@domain格式获取用户名?

编辑:

我在这个编辑中做出回应,因为回复的每个人都有相同的基本想法.

根据我的理解,从domain\username格式中解析名称并将其构造为username@domain不安全或建议.我相信这是因为不能保证这两个域名在不同的格式中是相同的.例如,在我工作的公司中,格式的domain一部分domain\username基于deparment,但在username@domain,它是公司名称.这是需要DNS查找的事情.

我希望有一个API执行此DNS查找.我想我应该把这些信息放到原来的问题中.抱歉.

Kev*_*vin 9

像这样的东西应该工作......

string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];
Run Code Online (Sandbox Code Playgroud)


Ton*_*ile 5

所有以格式获取名称Domain\user name并解析它的代码并非在所有情况下都有效。答案是您必须调用 Active Directory 才能获取用户主体名称。事实证明,我不能依赖安装在台式机上的 Active Directory,因为许多警察部门不会在笔记本电脑上安装该目录,以防警察不在车内时目录被盗。(从警车里偷走一台电脑,真是勇敢!)

我们针对我们的情况提出了自己的解决方案。我们以格式将用户名存储在数据库中Domain\user name。当程序启动时,它会检查当前的Windows用户名(格式相同)是否在数据库中。如果是,程序将使用该用户作为当前用户并运行。如果当前的 Windows 用户不在我们的数据库中,则程序将回退到我们之前的代码。

这样,用户可以使用任何格式的用户名登录计算机,并通过 Windows 进行身份验证。我们的程序始终以相同的格式获取用户名,并且始终检查该格式的用户名。Windows 对用户而不是我们进行身份验证。