1

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

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

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

根据这个问题,用于识别用户的推荐数据是 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对于ContextType.MachineName.

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

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

4

1 回答 1

0

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

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

于 2015-11-04T17:18:11.647 回答