веб-приложение asp.net - проверьте, существует ли пользователь в группе Active Directory

У меня есть веб-приложение asp.net, как проверить, что текущий зарегистрированный пользователь (клиент) находится в определенной группе Active Directory. Спасибо


person Yogesh    schedule 30.05.2011    source источник
comment
Отличный ответ, но для справки в будущем при реализации получена {Неизвестная ошибка (0x80005000)}. Исправлено добавлением домена в следующую строку: var pc = new PrincipalContext (ContextType.Domain, Environment.UserDomainName);   -  person Paul Blackwell    schedule 07.02.2013


Ответы (2)


Попробуйте следующий метод. Просто измените его по своему усмотрению ...

public List<string> GetGroupNames(string userName)
{
    var pc = new PrincipalContext(ContextType.Domain);
    var src = UserPrincipal.FindByIdentity(pc, userName).GetGroups(pc);
    var result = new List<string>();
    src.ToList().ForEach(sr => result.Add(sr.SamAccountName));
    return result;
}
person Leniel Maccaferri    schedule 30.05.2011
comment
Привет, Лениэль, спасибо за быстрый ответ. Я просто скопировал ваш код, запущенный в простом веб-приложении. это дало ошибку - {Неизвестная ошибка (0x80005000)}, я что-то упустил? - person Yogesh; 30.05.2011
comment
@Yogesh: проверьте это: lansweeper.com/ forum / Это довольно обширная ошибка. Если вы поищете эту Неизвестную ошибку в Google, вы получите множество возможных проблем ... - person Leniel Maccaferri; 30.05.2011
comment
Для этого требуется .NET 3.5 или выше - не работает с 2.0 или 3.0. Также: пользователь, под которым запущено веб-приложение, должен иметь разрешение хотя бы на чтение AD. - person marc_s; 30.05.2011
comment
@Yogesh: где (в какой строке кода) возникает эта ошибка при отладке через ?? - person marc_s; 30.05.2011
comment
var src = UserPrincipal.FindByIdentity (pc, userName) .GetGroups (pc); - person Yogesh; 30.05.2011
comment
Я создал одну группу AD (локальную) и назначил пользователя, пытаясь получить эту группу, я думаю, что это то место, где я потерял. Пожалуйста, поправьте меня, если я ошибаюсь, группа AD должна находиться в домене, а не в локальном ящике. - person Yogesh; 30.05.2011
comment
теперь я использовал существующую группу, членом которой я являюсь, и я использовал эту строку кода flag = User.IsInRole (ADGroupName); .... Бинго! и это сработало - person Yogesh; 30.05.2011

Попробуйте это (работает только в ASP.NET, но аналогичные вызовы доступны для приложений Windows)

    if (HttpContext.Current.User.IsInRole("RoleName"))
    {
        return true;
    }
    else
    {
        return false;
    }

Надеюсь, это поможет
Харви Сэзер

person Harv    schedule 30.05.2011