ASP.NET - 获取一个DirectoryEntry / SID校长/相对标识符(RID)(A

2019-08-01 00:58发布

我正在使用自定义的MembershipProvider类的Active Directory中的ASP.NET 2.0 Intranet应用程序来验证用户及其使用的SID为应用程序配置文件关联。

ActiveDirectoryMembershipProvider被使用时, ProviderUserKey为对象MembershipUser是如下

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey;
string sidValue = sid.ToString();

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY"  */

据我所知, YY是命名空间(也被称为一组/域)内的主体。

当使用自定义的MembershipProvider,我可以用得到的sid objectSid一个DirectoryEntry对象的属性

DirectoryEntry entry = new DirectoryEntry(path, username, password);
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0);
string sidValue = sid.ToString();

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX"  */

所述sidValue在这种情况下是相同的,只是它不包含主YY

我的问题是双重的

  1. 是为了唯一识别个人所需的校长?
  2. 是否有可能获得从DirectoryEntry对象的主要(或通过可用的任何其他类System.DirectoryServices )?

编辑:

已经做了一些进一步读取( {1} {2} ),我现在知道的是,如果用户从一个组/域移动到另一个中的SID可以改变。 鉴于此,使用将GUID在所定义DirectoryEntry Properties["objectGUID"]是用于唯一地识别用户的一个更好的选择?

Answer 1:

所述的objectGUID是用于标识用户帐户的最佳选择。 我强调这一点,因为是的objectGUID唯一且固定的一个帐户的实例。 如果删除并重新创建具有相同的distinguishedName帐户,你会得到一个不同的objectGUID。 所以,的objectGUID不识别用户,它标识帐户。

所以,如果你想识别帐户,使用的objectGUID。

有时候,帐户可以被删除并重新创建管理员解决问题。 如果您需要识别用户即使发生这种情况,您需要选择帐户对象得也快。 这可能要取决于您的帐户定义的策略。 也许你有不基于用户的名字sAMAccountNames? 也许管理员填充雇员或employeeNumber? 也许他们强制执行displayNames独特性?

这里有一个链接AD属性信息 。 下面是一个链接的DirectoryEntry属性 。



文章来源: ASP.NET - Get the Principal / Relative Identifier (RID) for a DirectoryEntry / SID