I ran into the following error while traversing certain user’s security groups in Active Directory:
System.DirectoryServices.AccountManagement.NoMatchingPrincipalException: An error occurred while enumerating the groups. The group could not be found.
The error was thrown when calling GetAuthorizationGroups() on line 3:
PrincipalContext adServer = new PrincipalContext(ContextType.Domain, CasRolesConfig.ADServer);
UserPrincipal adUser = UserPrincipal.FindByIdentity(adServer, samAccountName );
PrincipalSearchResult<Principal> adAuthGroups = adUser.GetAuthorizationGroups();
foreach (Principal adAuthGroup in adAuthGroups)
{
string groupName = adAuthGroup.Name;
// [...]
}
The error occurs when the group or child group contains a ForeignSecurityPrincipal. Microsoft has confirmed it as an issue and a bug has been raised internally.
As a workaround, I was able to accesss the security groups with the following code:
DirectoryEntry searchRoot = new DirectoryEntry();
searchRoot.Path = "LDAP://" + SecConfig.ActiveDirectoryServer;
searchRoot.AuthenticationType = AuthenticationTypes.Secure;
DirectorySearcher adSearcher = new DirectorySearcher();
adSearcher.SearchRoot = searchRoot;
adSearcher.Filter = "(samAccountName=" + samAccountName + ")";
adSearcher.PropertiesToLoad.Add("memberOf");
SearchResult samResult = adSearcher.FindOne();
if (samResult != null)
{
DirectoryEntry adAccount = samResult.GetDirectoryEntry();
foreach (String groupMembership in adAccount.Properties["memberOf"])
{
string groupName = groupMembership;
// [...]
}
}

Thanks man…this is a pretty obscure error, but lo and behold…it happened to me on an old 32 bit machine I was using for testing. This was helpful.