У меня есть форма аутентификации:Form Authentication - ошибка операции произошла FindByIdentity
<authentication mode="Forms">
</authentication>
<authorization>
<deny users="?" />
</authorization>
У меня есть страница с моим логином и проверить удостоверение, что я делаю:
public static bool ValidateCredentials(string sUserName, string sPassword, string sDomain)
{
PrincipalContext oPrincipalContext = GetPrincipalContext(sDomain);
try
{
return oPrincipalContext.ValidateCredentials(sUserName, sPassword);
}
catch (Exception ex)
{
ASTools.LogError(ex.ToString());
return false;
}
}
это работает. Затем я хочу проверить группу участников. Поэтому я делаю:
public static bool IsGroupMember(string username, string sDomain)
{
List<string> groupList = new List<string>() {"WebDeveloper", "SyncDeveloper"};
using (System.Web.Hosting.HostingEnvironment.Impersonate())
{
try
{
PrincipalContext domain = new PrincipalContext(ContextType.Domain, sDomain);
UserPrincipal user = UserPrincipal.FindByIdentity(domain, IdentityType.SamAccountName, username);
foreach (string groupname in groupList)
{
var group = GroupPrincipal.FindByIdentity(domain, groupname);
if (group != null)
{
if (group.GetMembers(true).Any(member => user.SamAccountName.ToLower() == member.SamAccountName.ToLower()))
{
return true;
}
}
}
}
catch (Exception ex)
{
ASTools.LogError(ex.ToString());
}
}
return false;
}
В локальный он работает, но когда я публикую оно не и эта ошибка возникает:
System.DirectoryServices.DirectoryServicesCOMException (0x80072020): An operations error occurred.
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue)
at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)
at ASActiveDirectory.IsGroupMember(String username, String sDomain) in c:\inetpub\Applicazioni\DeviceManage\App_Code\ASActiveDirectory.cs:line 78
Я пытался добавить
using (System.Web.Hosting.HostingEnvironment.Impersonate())
, а также
<identity impersonate="true"/>
затем я попытался изменить личность моего пула до NetworkService
и LocalSystem
, но ничего не изменилось. Я не понимаю, почему в моем собственном ПК все работает нормально даже с ApplicationPoolIdentity
.. Я знаю, что этот вопрос задан много раз, но я пробовал каждое предложение, которое я нашел, и они не работают для меня .. Пожалуйста, помогите мне!