【问题标题】:Obtaining the SecurityIdentifier (SID) from just a domain username (c#)仅从域用户名 (c#) 中获取 SecurityIdentifier (SID)
【发布时间】:2011-01-26 17:40:03
【问题描述】:

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

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

所有的静态函数都可以接受字符串形式的用户名和字符串形式的域名。

如果域留空,用户帐户名与正在执行进程的 IIS 服务器位于同一域内,这很有趣。 :/

我们将一如既往地感谢您的帮助。 干杯。

【问题讨论】:

  • 确实 HttpContext.Current 有时会为空,但具体什么时候遇到这个问题?
  • 这是一个库函数,应该可以在没有HttpContext存在的情况下使用

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


【解决方案1】:

要获取用户的域,您可以使用LookupAccountName。如果您需要 pinvoke 示例,请从pinvoke.net获取它

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

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

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

【讨论】:

    【解决方案2】:

    尝试使用目录服务?为此需要 .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"];
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多