我正在使用自定义的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
。
我的问题是双重的
- 是为了唯一识别个人所需的校长?
- 是否有可能获得从DirectoryEntry对象的主要(或通过可用的任何其他类
System.DirectoryServices
)?
编辑:
已经做了一些进一步读取( {1} {2} ),我现在知道的是,如果用户从一个组/域移动到另一个中的SID可以改变。 鉴于此,使用将GUID
在所定义DirectoryEntry
Properties["objectGUID"]
是用于唯一地识别用户的一个更好的选择?