在数据库中存储什么以识别Active Directory和本地帐户用户

时间:2015-11-04 15:24:08

标签: c# wpf security active-directory principalcontext

我正在为我的WPF应用程序编写权限系统,该系统需要同时使用Active Directory和本地计算机帐户;系统可能连接也可能不连接到网络。

用户可以使用AD登录或本地计算机登录来登录应用程序。应用程序将数据存储在SQL Server Express数据库中,每行都有一个“所有者”。

应用程序将仅显示登录用户“拥有”的行。

this question,要存储以识别用户的推荐数据是LDAP objectGUID,我可以使用下面的代码检索它并存储在uniqueidentifier列中。

using System.DirectoryServices.AccountManangement;
using System.Security.Principal;

public class ActiveDirectoryHelper
{
    public static Guid? GetObjectGuidFromIdentity(WindowsIdentity identity)
    {
      string domainName = identity.Name.Split('\\')[0];

      PrincipalContext pc = null;
      if (domainName == Environment.MachineName)
      {
        pc = new PrincipalContext(ContextType.Machine);
      }
      else
      {
        pc = new PrincipalContext(ContextType.Domain, domainName);
      }

      UserPrincipal user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, identity.Name);
      return user.Guid;

  }
}

但是,UserPrincipal.Guid的{​​{1}}为空。

我可以存储一条可以引用AD帐户或本地帐户的信息吗?

或者我是否需要添加另一列来指定目录类型(AD / SAM)并使用另一列来存储不同的标识符(SID)?

1 个答案:

答案 0 :(得分:0)

正如您所发现的,本地帐户没有GUID。相反,他们只有一个SID。

您可以选择使用SID来识别用户,这样您就只有一个标识符。 GUID的结果是,在客户重构其Active Directory林的情况下,用户的GUID将保持静态,而SID将改变。