【问题标题】:ASP.NET - Get the Principal / Relative Identifier (RID) for a DirectoryEntry / SIDASP.NET - 获取 DirectoryEntry / SID 的主体 / 相对标识符 (RID)
【发布时间】:2010-11-18 21:58:24
【问题描述】:

我在自定义 MembershipProvider 类中使用 Active Directory 对 ASP.NET 2.0 Intranet 应用程序中的用户进行身份验证,并将他们的 sid 与应用程序的配置文件相关联。

使用ActiveDirectoryMembershipProvider时,MembershipUserProviderUserKey对象如下

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

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

据我了解,YY 是命名空间中的主体(也称为组/域)。

使用自定义 MembershipProvider 时,我可以使用 DirectoryEntry 对象的objectSid 属性获取 sid

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 可能会改变。鉴于此,使用DirectoryEntry Properties["objectGUID"] 中定义的GUID 是唯一标识用户的更好选择吗?

【问题讨论】:

    标签: c# asp.net active-directory asp.net-membership sid


    【解决方案1】:

    objectGUID 是识别用户帐户的最佳选择。我强调这一点是因为 objectGUID 是唯一的,并且对于帐户实例是固定的。如果您删除并重新创建具有相同 distinctName 的帐户,您将获得不同的 objectGUID。因此,objectGUID 不识别用户,它识别帐户。

    因此,如果您想识别帐户,请使用 objectGUID。

    有时,管理员可以删除并重新创建帐户以解决问题。如果即使在这种情况发生后仍需要识别用户,则需要在帐户对象上选择其他内容。这可能必须取决于您的帐户定义策略。也许您有不基于用户名的 sAMAccountNames?也许管理员填充了employeeid 或employeeNumber?也许他们强制 displayNames 的唯一性?

    这是AD attribute info 的链接。 这是DirectoryEntry Properties的链接。

    【讨论】:

    • objectGUID 是帐户的 GUID 还是目录条目所代表的对象类型的 GUID?另外,您是否有任何提供每个目录条目属性详细信息的文档的链接?
    • 个人账户的 GUID。如果您使用 ADSI Edit MMC 管理单元 (technet.microsoft.com/en-us/library/cc773354(WS.10).aspx),您可以在 Active Directory 中看到它。
    • 我添加了指向主帖的链接,因为前一个似乎有点混乱。我不确定您是否需要 DirectoryEntry 对象或 AD 对象的属性。在后一种情况下,AD 人们倾向于将它们称为属性。所以一个AD类的实例,比如user,有displayName这样的属性。 DirectoryEntry 的一个实例有一个 Properties 属性,该属性包含一组属性及其值。它应该被称为属性,IMO。
    • Windows 帐户是否有类似对象 GUID 的东西?
    • 如果您指的是 Windows 机器上的本地帐户(相对于 Active Directory 帐户),那么不,没有。但是您仍然拥有可以使用的 SID。
    猜你喜欢
    • 2014-10-04
    • 2012-08-10
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多