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查找.我想我应该把这些信息放到原来的问题中.抱歉.
像这样的东西应该工作......
string[] temp = Convert.ToString(WindowsIdentity.GetCurrent().Name).Split('\\');
string userName = temp[1] + "@" + temp[0];
Run Code Online (Sandbox Code Playgroud)
所有以格式获取名称Domain\user name
并解析它的代码并非在所有情况下都有效。答案是您必须调用 Active Directory 才能获取用户主体名称。事实证明,我不能依赖安装在台式机上的 Active Directory,因为许多警察部门不会在笔记本电脑上安装该目录,以防警察不在车内时目录被盗。(从警车里偷走一台电脑,真是勇敢!)
我们针对我们的情况提出了自己的解决方案。我们以格式将用户名存储在数据库中Domain\user name
。当程序启动时,它会检查当前的Windows用户名(格式相同)是否在数据库中。如果是,程序将使用该用户作为当前用户并运行。如果当前的 Windows 用户不在我们的数据库中,则程序将回退到我们之前的代码。
这样,用户可以使用任何格式的用户名登录计算机,并通过 Windows 进行身份验证。我们的程序始终以相同的格式获取用户名,并且始终检查该格式的用户名。Windows 对用户而不是我们进行身份验证。