【发布时间】:2010-11-18 21:58:24
【问题描述】:
我在自定义 MembershipProvider 类中使用 Active Directory 对 ASP.NET 2.0 Intranet 应用程序中的用户进行身份验证,并将他们的 sid 与应用程序的配置文件相关联。
使用ActiveDirectoryMembershipProvider时,MembershipUser的ProviderUserKey对象如下
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。
我的问题有两个
- 是否需要委托人才能唯一标识个人?
- 是否可以从 DirectoryEntry 对象(或通过
System.DirectoryServices中可用的任何其他类)获取主体?
编辑:
做了一些进一步的阅读 ({1}{2}),我现在知道如果用户从一个组/域移动到另一个,sid 可能会改变。鉴于此,使用DirectoryEntry Properties["objectGUID"] 中定义的GUID 是唯一标识用户的更好选择吗?
【问题讨论】:
标签: c# asp.net active-directory asp.net-membership sid