В частности, имеет ли смысл запрет, сопровождаемый разрешением? Зачем вам отказывать, а затем разрешать всем?
Да, здесь есть смысл. Обратите внимание, что здесь используются два разных подстановочных знака.
?
означает анонимные, еще не аутентифицированные запросы .
*
означает любые запросы, аутентифицировано или нет .
Правила проверяются по порядку.
Эти два, в этом конкретном порядке, делают механизм перенаправления только не аутентифицированных запросов, но пропускают любые другие (= здесь: authenticated ) Запросы.
Мне нужно разрешить доступ к определенному параметру запроса, чтобы предотвратить ошибки 403 для неаутентифицированных пользователей.
Если вам нужен этот параметр запроса на любой запрос uri тогда тебе не повезло. Это не легко здесь, так как у вас уже есть два правила, определенные выше. Эти два будут работать всегда, и не существует легкого (декларативного) способа сделать это
<deny users="?" />
условно, основываясь на параметре строки запроса.
Но у меня есть клиенты SSO, которые используйте параметр запроса, чтобы направить их на указанную c страницу входа.
Имеет смысл, однако вам, возможно, придется изменить свой подход.
Если я правильно понимаю, Вы хотите, чтобы эти два правила работали всегда, но если в uri указан указанный параметр строки запроса c, вы хотите отключить два правила.
Я хотел бы получить свою собственную авторизацию модуль, который заменит authorization
правил, вставленных в web.config
.
Этот модуль авторизации вызовет код состояния 401 из события запроса на авторизацию в конвейере для любого запроса без проверки подлинности, который отправляется на любую другую страницу, кроме страницы входа и страницы ошибки. Два исключения (логин и ошибка) соответствуют вашему определению того, как будет работать авторизация. Но если аргумент строки запроса найден - вы пропустите это.
Поскольку 401 вызывается в конвейере до выполнения обработчика, среда выполнения ASP. NET не будет отображать страницы, но будет продолжать конвейер до достижения события end request . Здесь вы проверяете, было ли поднято значение 401, и если это так, вы заменяете 401 на 200 и перенаправляете на страницу входа в систему.
В зависимости от того, звучит ли это выше или нет, вы могли бы либо заставить это работать быстро или вам понадобится некоторое время, чтобы написать такой модуль авторизации. Оставьте записку, если вам нужен дальнейший совет.