Почему <deny users="“?”" /> включено в следующий пример?
Вопрос
В ?
подстановочный знак представляет пользователей, не прошедших проверку подлинности, в то время как *
представляет всех пользователей, прошедших проверку подлинности и не прошедших проверку подлинности.В моей книге показан следующий пример авторизации по URL:
<authorization>
<deny users="?" />
<allow users="dan,matthew" />
<deny users="*" />
</authorization>
Но разве приведенный выше код не имеет того же эффекта, что и :
<authorization>
<allow users="dan,matthew" />
<deny users="*" />
</authorization>
или автор также включил <deny users="?" />
править по какой-то причине?
Решение
ASP.NET предоставляет доступ из файла конфигурации в порядке приоритета.В случае потенциального конфликта приоритет имеет первое возникающее предоставление.Итак,
deny user="?"
запрещает доступ анонимному пользователю.Тогда
allow users="dan,matthew"
предоставляет доступ этому пользователю.Наконец, это лишает доступа всех.Это потрясает, поскольку всем, кроме Дэна, Мэтью отказано в доступе.
Отредактировано для добавления:и, как указывает @Deviant, отказывать в доступе к не прошедшему проверку подлинности бессмысленно, поскольку последняя запись также включает в себя не прошедший проверку подлинности.Хорошую запись в блоге, посвященную этой теме, можно найти по адресу: Блог Гуру Саркара
Другие советы
"Во время выполнения модуль авторизации перебирает элементы allow и deny, начиная с самого локального файла конфигурации, пока модуль авторизации не найдет первое правило доступа, соответствующее конкретной учетной записи пользователя.Затем модуль авторизации предоставляет или отказывает в доступе к URL-ресурсу в зависимости от того, является ли первое найденное правило доступа правилом разрешения или запрета.Правилом авторизации по умолчанию является .Таким образом, по умолчанию доступ разрешен, если не настроено иное ".
Статья в MSDN
deny = * means deny everyone
deny = ? means deny unauthenticated users
В вашем 1-м примере запрет * не повлияет на Дэна, Мэтью, поскольку они уже были разрешены предыдущим правилом.
Согласно документам, здесь нет никакой разницы в ваших 2 наборах правил.
Пример 1 предназначен для asp.net приложений, использующих аутентификацию форм.Это обычная практика для интернет-приложений, поскольку пользователь не проходит проверку подлинности до тех пор, пока не пройдет аутентификацию в каком-либо модуле безопасности.
Пример 2 предназначен для asp.net приложения, использующего проверку подлинности Windows.Проверка подлинности Windows использует Active Directory для проверки подлинности пользователей.Это предотвратит доступ к вашему приложению.Я использую эту функцию в приложениях интрасети.
Смотрите эти две ссылки:
запретить элемент для авторизации (ASP.NET Схема настроек) http://msdn.microsoft.com/en-us/library/vstudio/8aeskccd%28v=vs.100%29.aspx
разрешить элемент для авторизации (ASP.NET Схема настроек): http://msdn.microsoft.com/en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx