前置条件详情
1.使用.NET 2.0。
1.代码位于一个公共库中,可以从ASP.NET、Windows窗体或控制台应用程序调用该库。
1.在企业网络上的Windows域中运行。
问题
获取当前用户的SID的最佳方法是什么?我说的不是执行应用程序的标识,而是访问接口的用户。在后台应用程序和基于桌面的应用程序中,这应该是实际执行应用程序的标识,但在ASP.NET中(没有命令),这应该是HttpContext.Current.UserSID。
当前方法
这就是我现在所拥有的。只是看起来...不对。很恶心。有没有更好的方法来做到这一点,或者一些内置的类,为您做?
public static SecurityIdentifier SID
{
get
{
WindowsIdentity identity = null;
if (HttpContext.Current == null)
{
identity = WindowsIdentity.GetCurrent();
}
else
{
identity = HttpContext.Current.User.Identity as WindowsIdentity;
}
return identity.User;
}
}
4条答案
按热度按时间byqmnocz1#
我不认为有更好的方法来获取这些信息--你必须以某种方式获取WindowsPrincipal和.NET的相当干净的API抽象,它隐藏在User对象后面。我只需要把它放在一个方法中,然后就结束了。
好吧,好吧,有一件事你应该做(除非你的网络用户总是要WindowsIdentity),这将是检查空身份,并根据任何规则处理它。
kcwpcxri2#
如果用户更改了用户名,则不使用第三方库,此代码将给予正确的结果。
djp7away3#
返回当前用户:
以SDDL格式返回安全标识符(SID),即***S-1-5-9***:
返回帐户域安全标识符(SID)如果SID不表示Windows帐户SID,则此属性返回null:
您可以将其用作:
vc6uscn94#
WindowsIdentity类是“为您做这件事的内置类”。只要有一个有效的WindowsIdentity,你就可以得到一个简单的解决方案。
或者,如果您有问题用户的用户名,并且希望直接从AD获取SID,则可以构建自己的库来使用DirectoryServices命名空间并检索用户的DirectoryEntry(这是一个相当复杂的过程,因为DirectoryServices很棘手)。如果有需要,您甚至可以使用LDAP来获取它。