我正在使用的网络应用程序使用Active Directory中的用户ID和组ID。也就是说,用户可以根据他们在AD群组中的成员身份继承对应用程序某些部分(特别是报告)的访问权限。
因此,我们使用用户的GUID和组的GUID作为数据库跟踪功能访问的关键。
App在开发环境(Windows 7上运行的IIS7)上运行良好。但是当我尝试在我的测试环境中设置网站(在Windows Server 2008 R2上运行IIS7)时,我收到以下错误:
无法将“System.DirectoryServices.AccountManagement.GroupPrincipal”类型的对象强制转换为“System.DirectoryServices.AccountManagement.UserPrincipal”。
从堆栈跟踪中看来,有罪的代码是:
public string UserGUID
{
get
{
return UserPrincipal.Current.Guid.ToString();
}
}
我也在一个方法中访问GroupPrincipals,该方法获取特定用户所属的所有组:
public ArrayList Get_UserGroupGUIDs(string username)
{
ArrayList oList = new ArrayList();
// "company" is the domain we would like to search in
using ( PrincipalContext ctx = new PrincipalContext ( ContextType.Domain, "isidc.com" ) )
{
// get the user of that domain by his username, within the context
using ( UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username))
{
if (up != null)
{
// fetch the group list
using (PrincipalSearchResult<Principal> Groups = up.GetAuthorizationGroups())
{
foreach (GroupPrincipal g in Groups)
{
oList.Add(g.Guid.ToString());
} // end foreach
} // end using
} // end if
} // end using
return oList;
} // end method Get_UserGroupGUIDs
有什么想法吗?