Почему <deny users = "?" /">, приведенные в следующем примере?

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

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


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

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

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

Ответ 1

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

deny user="?" 

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

allow users="dan,matthew" 

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

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

Ответ 2

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

Статья на MSDN

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

В вашем первом примере deny * не повлияет на dan, matthew, так как они уже были разрешены предыдущим правилом.

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

Ответ 3

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

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