【问题标题】:What to store in database to identify Active Directory and local account users在数据库中存储什么来识别 Active Directory 和本地帐户用户
【发布时间】:2015-11-04 15:24:07
【问题描述】:

我正在为我的 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;

  }
}

但是,对于ContextType.MachineNameUserPrincipal.Guid 为空。

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

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

【问题讨论】:

    标签: c# wpf security active-directory principalcontext


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 2010-12-27
      • 2020-05-15
      • 1970-01-01
      相关资源
      最近更新 更多