IPrincipal.IsInRole () работает только тогда, когда я усекаю имена ролей - почему?

У меня есть приложение, которое в значительной степени полагается на авторизацию пользователей. В нем я использую IPrincipal.IsInRole () , чтобы проверить, входят ли пользователи в правильные группы:

IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");

По большей части это работает нормально, но не работает (возвращает неверный результат), если принципал экземпляр WindowsPrincipal . Я обнаружил, что для правильной работы Мне нужно усечь имя роли, которую я передаю, чтобы она состояла из 32 символов (включая имя домена и \ ):

IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");

Усечение имени роли работает правильно. Зачем? Это ошибка / особенность / задокументированная проблема? У меня есть подозрение, что это может быть связано с доменами Win2000, но я не могу найти о нем никакой информации.

Дополнительная информация:
Это проблема, потому что приложение может быть настроено для использования либо активного каталога, либо «custom» для авторизации («custom» - это любой провайдер авторизации, поддерживающий интерфейс - может быть на основе SQL, на основе файлов и т. Д.). Когда настроен custom, роли, скорее всего, не нуждаются в усечении, поэтому я не хочу иметь дело с этим особым случаем в моем коде. Кроме того, у меня есть другая часть приложения, которая использует классы в пространстве имен System.DirectoryServices.AccountManagement для поиска членства в группах. Это требует полного имени роли и не работает, если они усечены.

6
задан adrianbanks 23 September 2010 в 09:44
поделиться