Вот фон. У меня был проект.NET MVC v1.0, что я пытался защитить его при помощи режима аутентификации Windows. Таким образом, я установил web.config на:
<authentication mode="Windows" />
И затем вошел в мой контроллер и сделал следующее:
[Authorize(Roles="IT")]
public class LicenseController : Controller
В AD у нас есть группа, названная "IT", и я - многие другие, имеют независимо эту группу. Как только я имел в распоряжении это, я запустил сеанс отладки и попытался идти в любое из действий в том контроллере, и я был встречен 401. Я ищу высокий и низкий поиск где-нибудь, что я завинтил пес и не мог найти ничто плохого. Через некоторое время борьбы я решил попытаться изменить "Авторизовывание" на определенного пользователя видение, если это работало. Таким образом, я изменил его на следующее:
[Authorize(Users="domain\\tnederveld")]
И низко и созерцают, который работал. Таким образом, я пошел и добавил другую группу, что я был членом и вынул пользователей, авторизовывают оператор, и это работало. Я начал изучать различия между двумя AD группами и единственной вещью, которая отличалась, был на второй группе, я попробовал "Название группы (предварительные Windows 2000)": было то же. Название группы "Групп "IT" (предварительные Windows 2000)": была "IT Associates". Таким образом, я пытался изменить авторизовать оператор на:
[Authorize(Roles="IT Associates")]
И это начало работать. Я думал наверняка, что это было проблемой MVC, так чтобы удостовериться, что я попробовал ее на обычном проекте Веб-форм и был, встречаются с той же проблемой.
Настоящая строка над заголовком то, что, когда Вы используете UserPrincipal, который является частью Системы. DirectoryServices. AccountManagement это возвращает группу "IT" при использовании.GetGroups () метод.
То, почему это, происходит?
Вы Необходимо поддерживать различные имена вход в объявления:
Имя , как правило, атрибут CN - общее имя. Это часть «CN = XXX» в вашей строке LDAP. Вот это Это
- и это то, что System.directoryservices.AccountManagement вернется - это наиболее распространенное имя «Active Directory»
Название «IT Associates» является предварительным Windows 2000 или SamaccountName
- вещь Windows NT используется для использования до того, как было объявление - локальное имя пользователя и / или групповое имя (SAM = управление учетной записью безопасности или что-то в этом роде). Имя учетной записи SAM должно быть уникальным на домен - даже в огромном лесе ad в наши дни.
К сожалению, множество вызовов API Windows все еще основаны на том имени - поскольку они являются (и должны быть) обратно совместимы с более ранними версиями Windows. Система членства ASP.NET использует эти звонки и, таким образом, будут использовать вашу домен / tdederveld
имя пользователя и IT Associates
Group - это имена учетных записей SAM ваших объектов
не уверены Если есть много, вы можете с этим поделать - просто имейте в виду, что в рекламной среде любой из ваших пользователей или групп имеет множество «имен» - всегда очень ясно, о котором вы говорите!
Для подробного списка всех атрибутов рекламы см. В отличном веб-сайте Richard Mueller с Справочный материал Active Directory .