Почему <deny users = "?" /> включены в следующем примере? - PullRequest
68 голосов
/ 07 мая 2009

Подстановочный знак ? представляет не прошедших проверку пользователей, а * представляет всех пользователей, прошедших проверку подлинности и не прошедших проверку. Моя книга показывает следующий пример авторизации URL:

<authorization>
  <deny users="?" />
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>


Но разве приведенный выше код не имеет такой же эффект, как:

<authorization>
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>

или автор также включил <deny users="?" /> правило по причине?

Ответы [ 4 ]

82 голосов
/ 07 мая 2009

ASP.NET предоставляет доступ из файла конфигурации в порядке приоритета. В случае потенциального конфликта приоритет имеет первый встречающийся грант. Итак,

deny user="?" 

запрещает доступ анонимному пользователю. Тогда

allow users="dan,matthew" 

предоставляет доступ этому пользователю. Наконец, он запрещает доступ всем. Это встряхивает, как все, кроме Дана, Мэтью отказано в доступе.

Отредактировано, чтобы добавить: и, как указывает @Deviant, отказ в доступе к неаутентифицированным является бессмысленным, так как последняя запись также включает и неаутентифицированные Хорошую запись в блоге, посвященную этой теме, можно найти по адресу: Блог Гуру Саркара

37 голосов
/ 07 мая 2009

"Во время выполнения модуль авторизации перебирает элементы allow и deny, начиная с самого локального файла конфигурации, пока модуль авторизации не найдет первое правило доступа, которое соответствует определенной учетной записи пользователя. Затем модуль авторизации предоставляет или запрещает доступ к ресурсу URL в зависимости от того, является ли первое найденное правило доступа разрешающим или запрещающим правилом. Правило авторизации по умолчанию -. Таким образом, по умолчанию доступ разрешен, если не настроено иначе. "

Артикул на MSDN

deny = * means deny everyone
deny = ? means deny unauthenticated users

В вашем первом примере отрицание * не повлияет на Дана, Мэтью, поскольку они уже были разрешены предыдущим правилом.

Согласно документации, в ваших двух наборах правил нет разницы.

3 голосов
/ 07 мая 2009

Пример 1 для приложений asp.net, использующих аутентификацию форм. Это обычная практика для интернет-приложений, потому что пользователь не проходит проверку подлинности до тех пор, пока не пройдет проверку подлинности на каком-либо модуле безопасности.

Пример 2 для приложения asp.net, использующего аутентификацию Windows. Аутентификация Windows использует Active Directory для аутентификации пользователей. Будет препятствовать доступу к вашему приложению. Я использую эту функцию в интранет-приложениях.

1 голос
/ 20 августа 2013

Смотрите эти две ссылки:

Запретить элемент для авторизации (схема настроек 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

...