ASP. NET web.config авторизация 403 ошибки - PullRequest
0 голосов
/ 06 января 2020

Админ для нового ASP. NET веб-решения.

Файл web.config озадачил меня, и я не смог найти ничего подобного в Интернете. 2 вопроса:

Правильно ли это выглядит?

<authentication mode="Forms">
        <forms loginUrl="Authentication/SignIn.aspx" timeout="121" slidingExpiration="true" cookieless="UseCookies" />
        </authentication>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>

В частности, имеет ли смысл запрет, сопровождаемый разрешением? Зачем вам отказывать, а затем разрешать всем?

Второй вопрос: далее в web.config мы разрешаем неаутентифицированным пользователям доступ к следующей странице.

<location path="Error.aspx">
    <system.web>
        <authorization>
            <allow users="?" />
        </authorization>
    </system.web>
</location>

Мне нужно разрешить доступ к определенному параметру запроса, чтобы предотвратить 403 ошибки для неаутентифицированных пользователей.

Пример: www.abc.com/?value=Test

<location path="?value=Test">
    <system.web>
        <authorization>
            <allow users="?" />
        </authorization>
    </system.web>
</location>

Это не работает, чего я не ожидал. Проблема в том, что у меня есть нормальные клиенты, которые www.abc.com перенаправляют на страницу входа в систему и работают исправно. Но у меня есть клиенты единого входа, которые используют параметр запроса, чтобы направить их на указанную c страницу входа.

1 Ответ

0 голосов
/ 06 января 2020

В частности, имеет ли смысл запрет, сопровождаемый разрешением? Зачем вам отказывать, а затем разрешать всем?

Да, здесь есть смысл. Обратите внимание, что здесь используются два разных подстановочных знака.

? означает анонимные, еще не аутентифицированные запросы .

* означает любые запросы, аутентифицировано или нет .

Правила проверяются по порядку.

Эти два, в этом конкретном порядке, делают механизм перенаправления только не аутентифицированных запросов, но пропускают любые другие (= здесь: authenticated ) Запросы.

Мне нужно разрешить доступ к определенному параметру запроса, чтобы предотвратить ошибки 403 для неаутентифицированных пользователей.

Если вам нужен этот параметр запроса на любой запрос uri тогда тебе не повезло. Это не легко здесь, так как у вас уже есть два правила, определенные выше. Эти два будут работать всегда, и не существует легкого (декларативного) способа сделать это

<deny users="?" />

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

Но у меня есть клиенты SSO, которые используйте параметр запроса, чтобы направить их на указанную c страницу входа.

Имеет смысл, однако вам, возможно, придется изменить свой подход.

Если я правильно понимаю, Вы хотите, чтобы эти два правила работали всегда, но если в uri указан указанный параметр строки запроса c, вы хотите отключить два правила.

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

Этот модуль авторизации вызовет код состояния 401 из события запроса на авторизацию в конвейере для любого запроса без проверки подлинности, который отправляется на любую другую страницу, кроме страницы входа и страницы ошибки. Два исключения (логин и ошибка) соответствуют вашему определению того, как будет работать авторизация. Но если аргумент строки запроса найден - вы пропустите это.

Поскольку 401 вызывается в конвейере до выполнения обработчика, среда выполнения ASP. NET не будет отображать страницы, но будет продолжать конвейер до достижения события end request . Здесь вы проверяете, было ли поднято значение 401, и если это так, вы заменяете 401 на 200 и перенаправляете на страницу входа в систему.

В зависимости от того, звучит ли это выше или нет, вы могли бы либо заставить это работать быстро или вам понадобится некоторое время, чтобы написать такой модуль авторизации. Оставьте записку, если вам нужен дальнейший совет.

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