仅从域用户名(c#)获取SecurityIdentifier(SID)

时间:2011-01-26 17:40:04

标签: c# .net asp.net security active-directory

我希望从用于访问我网页的用户帐户中获取 SID,但是......

在某些情况下,有权访问HttpContext对象以调用HttpContext.Current.Request.LogonUserIdentity.User.Value

所有静态函数都能够接受用户名作为字符串,域名作为字符串。

如果域保留为空,则可以确定用户帐户名与执行该进程的IIS服务器位于同一域中。 :/

您的帮助将一如既往地受到赞赏。 欢呼声。

2 个答案:

答案 0 :(得分:1)

要获取用户的域名,您可以使用LookupAccountName。如果您需要pinvoke样本,请从pinvoke.net

获取

您将DOMAIN\UserName传递给该函数。 LookupAccountName函数将返回用户SID和域名。

我怀疑你真的不需要知道域SID。我认为返回的域名应该足够了。如果您真的想知道域SID,可以直接从返回的用户SID中提取它。

用户SID始终以域SID开头。有关SID结构的外观以及如何提取域SID的详细信息,请查看here

答案 1 :(得分:0)

尝试使用目录服务?需要.Net 3.5:

public UserPrincipal GetUserPrincipal(string userName)
    {            
        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, LDAPDomain, LDAPUser, LDAPPassword);                     
        return UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName);            
    }

然后,您可以使用具有.Sid方法的UserPrincipal类。

我从web.config设置我的域名和AD帐户信息,如此

private String LDAPDomain
    {
        get
        {
            return ConfigurationManager.AppSettings["LDAPDomain"];
        }
    }