Работа с разделом <authorization>
После того как метод аутентификации проверит личность пользователя, авторизация определяет, имеет ли этот пользователь право доступа к ресурсу. Авторизацию можно настроить для сервера, сайта, приложения, поддиректории или одной страницы. Авторизация ASP.NET основана на предоставлении доступа или отказе в доступе на основе имени пользователя или роли пользователя. Когда пользователь запрашивает ресурс, процесс ASP.NET перед обработкой этого запроса проверяет, имеет ли данный пользователь право на его выполнение. Если пользователь авторизован, запрос обрабатывается, в противном случае возвращается ошибка 401.
Имеется два элемента, используемых в разделе <authorization>: <allow> и <deny>. Они предоставляют или запрещают доступ к ресурсу на основе имени пользователя, роли или того, как производится доступ к ресурсу. Процесс ASP.NET предполагает, что пользователь может получить доступ к ресурсу, и если нет правила, запрещающего доступ для этого пользователя, то доступ будет разрешен.
Ниже приведен синтаксис для использования элементов <allow> и <deny>.
<authorization> <allow users="list of users" roles="list of roles" verbs="list of verbs" /> <deny users="list of users" roles="list of roles" verbs="list of verbs" /> </authorization>
Оба элемента имеют одинаковые свойства (см. табл. 4.4).
users | Список пользователей, разделенных запятыми, которым разрешен или запрещен доступ к ресурсу. Знак вопроса "?" используется для представления анонимных пользователей, а звездочка "*" – для представления всех пользователей. Поместив перед именем пользователя имя домена (mydomain\domainuser), можно использовать это свойство для авторизации пользователей домена. |
roles | Список ролей, разделенных запятыми, которым разрешен или запрещен доступ к ресурсу. При использовании аутентификацию Windows в качестве ролей выступают группы Windows. Если нужно применять другие роли, их следует создать и управлять ими с помощью своего собственного кода. |
verbs | Список методов доступа HTTP, разделенных запятыми, которые разрешены или запрещены для ресурса. Доступными действиями являются GET, HEAD, POST и DEBUG. |
Вот пример того, как можно запретить доступ для анонимных пользователей, а затем предоставить доступ для некоторого количества других пользователей.
<authorization> <allow users="James, Tammy" /> <deny users="*" /> </authorization>
В этом примере при регистрации на сайте пользователей James и Tammy им будет предоставлен доступ к ресурсу. Для всех остальных пользователей доступ будет запрещен. Процесс ищет только первое правило, применимое к данному пользователю, и это правило определяет, имеет ли пользователь право доступа к ресурсу. В нашем примере при попытке доступа к приложению пользователя Tammy процесс найдет первое правило и предоставит ей доступ. Если бы правила были указаны в другом порядке, доступ ей был бы запрещен, так как первое применимое к ней правило являлось бы запрещающим. После того как процесс находит первое правило для пользователя, он прекращает читать настроечный файл.
Пример из практики. Возможность включать в свойство users пользователей домена полезна при создании сайта интранет. Если пользователи уже зарегистрировались в домене, и применяется аутентификация Windows, то легко настроить безопасность приложения, не используя дополнительные имена пользователей или пароли. Пользователи просто должны включить перед именем пользователя имя домена, за которым следует обратная косая черта (\) (mydomain\James).
Свойство roles предоставляет или запрещает доступ на основе роли пользователя. Ниже приведен пример использования ролей для предоставления доступа.
<authorization> <allow roles="Power Users" /> <deny users="*" /> </authorization>
В этом примере запрещается доступ для всех пользователей, а затем разрешается доступ для пользователей, являющихся членами группы Power Users (Опытные пользователи) системы Windows. Вы можете использовать группы Windows, так как в этом примере применяется аутентификация Windows. В противном случае вам пришлось бы создать свою собственную реализацию ролей.
Другой опцией для предоставления и запрета доступа для пользователей является свойство verb. Оно предоставляет или запрещает доступ на основе того, как пользователь пытается получить доступ к приложению – с помощью методов HTTP GET, POST, HEAD или DEBUG. Ниже приведен пример предоставления доступа POST для администратора и запрета его для всех остальных пользователей.
<authorization> <allow roles="Admins" verbs="POST" /> <deny users="*" verbs="POST" /> </authorization>
В примере пользователи группы Admins (Администраторы) системы Windows имеют право на использование POST для приложения; для всех остальных пользователей при попытке применения POST для приложения доступ будет запрещен.
Я вкратце обсуждал тег location в лекции 2, и теперь давайте посмотрим, как использовать этот тег совместно с авторизацией для управления тем, кто может получить доступ к отдельному файлу. В следующем примере тег location применяется для указания авторизационных прав доступа для одного файла – admin.aspx.
<location path="admin.aspx"> <System.Web> <authorization> <allow users="Administrator" /> <deny users="*" /> </authorization> </System.Web> </location>
В этом примере единственным пользователем, который получит доступ к файлу admin.aspx, является пользователь, определенный как Administrator. Использование тега location является единственным способом, с помощью которого права доступа можно применить к отдельному файлу.
Пример из практики. Использование тега location удобно, если нужно ограничить доступ к одной директории или одному файлу. Применяйте тег location для ограничения доступа к административным разделам своего приложения, не создавая второй страницы входа.
Можно применить права доступа к поддиректории приложения – для чего существуют два метода.
- Используйте тег location так, как показано в примере, и укажите список имен директорий в свойстве path.
- Добавьте в поддиректорию файл web.config и включите в него права доступа.