我在自定义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" */
Run Code Online (Sandbox Code Playgroud)
据我了解,它YY是命名空间中的主体(也称为组/域).
使用自定义MembershipProvider时,我可以使用objectSidDirectoryEntry对象的属性获取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" */
Run Code Online (Sandbox Code Playgroud)
在sidValue这种情况下是相同的,只是它不包含主体YY.
我的问题是双重的
System.DirectoryServices)获取主体?编辑:
做了一些进一步的阅读({1} {2})后,我现在知道如果用户从一个组/域移动到另一个组/域,sid可能会改变.鉴于此,将使用中GUID定义DirectoryEntry Properties["objectGUID"]的更好的选择来唯一识别用户?