Почему CheckUrlAccessForPrincipal по-прежнему возвращает true, если авторизация была отменена на уровне страницы? - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю динамический элемент управления навигацией, который переключает видимость элементов в навигации в зависимости от того, какие страницы пользователь имеет право просматривать в web.config.

Чтобы узнать, разрешен ли пользовательчтобы посетить страницу, я использую метод CheckUrlAccessForPrincipal и задаю правила авторизации для всего каталога, как этот.

<?xml version="1.0"?>
<configuration>
<system.web>
    <authorization>
        <allow roles="demo\Administrators"/>
        <deny users="*" />
    </authorization>
</system.web>
</configuration>

Это работает так, как ожидалось, и CheckUrlAccessForPrincipal возвращает false для всех страниц вкаталог, который содержит файл web.config, когда текущий пользователь не входит в группу администраторов.

Теперь я хочу установить правила авторизации на уровне страницы, например, так.

<?xml version="1.0"?>
<configuration>
<location path="DemoPage.aspx">
    <system.web>
        <authorization>
            <allow roles="demo\SomeDifferentGroup"/>
            <deny users="*" />
        </authorization>
    </system.web>
</location>
</configuration>

Если я сейчас проверю, разрешен ли пользователю доступ к DemoPage, CheckUrlAccessForPrincipal возвращает true, независимо от того, находится текущий пользователь в SomeDifferentGroup или нет.

Я заверил, что конфигурацияверно.Посещение страницы, для которой текущий пользователь не авторизован, открывает Windows-аутентификацию и предлагает пользователю предоставить действительные учетные данные.


Есть идеи, почему поведение отличается в зависимости от того, установлены ли правила авторизации на уровне каталога или папки?

1 Ответ

0 голосов
/ 08 февраля 2019

Хорошо, так что после 2 дней копания я наконец нашел ответ.По-видимому, в некоторых проектах ASP.NET пропускается конец файла .aspx в URL.

Если теперь вызвать метод CheckUrlAccessForPrincipal с URL-адресом, в котором отсутствует окончание .aspx, метод каким-то образом не распознаетправильно, что URL-адрес является страницей, и неправильно проверьте правила авторизации web.config.

Ручное добавление конца файла к URL-адресу устранило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...