我正在为需要同时使用 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)?