Аутентификация

advertisement
Delivering Excellence in Software Engineering
Безопасность в ASP.Net
Mikalai Strylets
Software Engineer
EPAM Systems
Brest branch office, Belarus
1
® 2011. EPAM Systems. All rights reserved.
Безопасность в ASP.Net
• Cредства защиты веб-приложений
от несанкционированного доступа:
– Аутентификация (authentication)
называется процесс идентификации
пользователей приложений.
– Авторизация (authorization) – это процесс
предоставления доступа пользователям на
основе их идентификационных данных.
2
® 2011. EPAM Systems. All rights reserved.
Аутентификация
• ASP.NET совместно с веб-сервером обеспечивает
несколько возможных типов аутентификации:
– Windows (default): этот метод основывается на
использовании учётных записей Windows
– Forms: аутентификация формой или, как её ещё называют,
аутентификация на основе Cookie-файлов
– Passport: это единая система регистрации, созданная
Microsoft, которой можно воспользоваться на любом Webсайте, являющемся членом этой системы.
– None
• Выбор типа определяет механизм хранения
маркеров аутентифицированного пользователя:
– В случае типа Windows маркер помещается в контекст
потока рабочего процесса ASP.NET.
– Если используется тип Forms, маркер передается от клиента
к серверу и обратно в cookie-файле.
3
® 2011. EPAM Systems. All rights reserved.
web.config
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authorization>
<deny users="?"/>
</authorization>
<authentication mode="Forms">
<forms loginUrl="login.aspx"/>
</authentication>
</system.web>
</configuration>
4
® 2011. EPAM Systems. All rights reserved.
Авторизация
• Метасимвол * используется для представления всех
пользователей, а ? – для представления анонимных
пользователей.
• Элементы <allow> и <deny> поддерживают три
атрибута: users, roles и verbs
• При определении прав доступа пользователя к ресурсу
ASP.NET придерживается следующего алгоритма:
– Строится список всех <allow> и <deny> элементов, начиная с
ближайшего к ресурсу web.config, а затем добавляя элементы из
web.config более высокого уровня, и, наконец, элементы
machine.config.
– Список просматривается сверху вниз до первого совпадения
имени или роли в списке с именем или ролью текущего
пользователя.
– Тот элемент, который будет обнаружен при совпадении,
определяет, может ли пользователь получить доступ к ресурсу.
То есть, если обнаружили при совпадении элемент <allow>, то
может, если <deny> - то нет.
5
® 2011. EPAM Systems. All rights reserved.
IPrincipal & IIdentity
• Если клиент аутентифицируется, то информация о нем
доступна посредством свойства User класса Page или класса
HttpContext.
• Свойство User указывает на реализацию интерфейса IPrincipal.
• Этот интерфейс содержит одно свойство и один метод.
– Свойство Identity является указателем на реализацию интерфейса IIdentity,
– а метод IsInRole() проверяет членство клиента в указанной группе.
public interface IIdentity
{
string AuthenticationType { get;
}
bool IsAuthenticated { get; }
string Name { get; }
}
6
® 2011. EPAM Systems. All rights reserved.
Аутентификация Forms
7
® 2011. EPAM Systems. All rights reserved.
Аутентификация Forms
• Когда пользователь первый раз запрашивает ресурс,
требующий аутентификации, сервер перенаправляет
запрос в выделенную страницу регистрации.
• Регистрационная страница принимает данные
пользователя (как правило, имя и пароль), а затем
приложение аутентифицирует пользователя
(предположительно с помощью базы данных).
• Если пользователь успешно зарегистрировался, сервер
предоставляет ему аутентификационный файл cookie в
зашифрованном виде, который действителен на
протяжении сеанса (но может быть сохранен на
клиентском компьютере для использования в
последующих сеансах).
• Пользователь перенаправляется к интересующему его
ресурсу, однако теперь он предоставляет в запросе
идентификационный cookie и получает доступ.
8
® 2011. EPAM Systems. All rights reserved.
Аутентификация Forms: преимущества и недостатки
• Преимущества:
– Во-первых, есть возможность определить по своему усмотрению
внешний вид формы регистрации вместо стандартного окна
регистрации Windows;.
– Во-вторых, вы полностью контролируете вводимую информацию;
– В третьих, сведения о пользователях теперь могут храниться не
– только в базе данных SAM (Security Account Manager) или Active
Directory, но и в хранилище другого типа, например: в базе данных, в
каталоге LDAP, в виде XML-файлов или же обычного текстового файла.
– И наконец, отпадает необходимость связывать политику безопасности
сервера с политикой Web-приложения, поскольку, как только что было
сказано, все сведения о пользователях можно вынести в отдельное
хранилище данных, не имеющее никакого отношения к учётным
записям ОС.
• Недостатки:
– пользователь должен разрешить применение cookie-файлов
9
® 2011. EPAM Systems. All rights reserved.
Class FormsAuthentication
• Чтобы аутентификация на основе cookie
заработала, нужно реализовать страницу
регистрации.
• Для реализации страницы регистрации платформа
ASP.NET предоставляет класс FormsAuthentication.
• Этот класс состоит главным образом из
статических методов, управляющих
аутентификационными файлами cookie.
• Например,
– чтобы предоставить такой файл клиенту, нужно вызвать
метод SetAuthCookie().
– метод RedirectFromLoginPage() предоставляет cookie клиенту
и перенаправляет клиента в запрошенную им страницу.
10
® 2011. EPAM Systems. All rights reserved.
FormsAuthentication
• Пример
11
® 2011. EPAM Systems. All rights reserved.
MemberShip, Roles, Profile
• Membership – управление
учетными записями
• Roles – управление ролями
(правами) пользователей
• Profile – хранение персональных
настроек пользователя
12
® 2011. EPAM Systems. All rights reserved.
Схема работы
• Создание необходимых таблиц в БД
• Регистрация в web.config для приложения
• Конфигурирование прав доступа на
основе web.config в директориях
приложения
• Использование элементов управления,
работающих с Membership/Roles
– Login, LoginView, LoginName, LoginStatus…
13
® 2011. EPAM Systems. All rights reserved.
Добавление в БД таблиц для поддержки безопасности
14
® 2011. EPAM Systems. All rights reserved.
Избранные таблицы
15
® 2011. EPAM Systems. All rights reserved.
Membership
• MembershipProvider
– ActiveDirectoryMembershipProvider
– SqlMembershipProvider
• Membership API
– Управление учетными записями
16
® 2011. EPAM Systems. All rights reserved.
Roles
• RoleProvider
• Управление доступом пользователей на
основании ролей
• Механизмы работы со списком ролей и
пользователей, относящимся к роли
• Интеграция с элементами управление
• Использование ролей на уровне файлов
конфигурации
17
® 2011. EPAM Systems. All rights reserved.
Элементы управления
• Поддержка Membership и Roles
– Форма аутентификации
– Отображение имени пользователя
– Форма восстановления пароля
– Мастер создания учетных записей
– Отображение контента на основании роли
пользователя
18
® 2011. EPAM Systems. All rights reserved.
Profile
• ProfileProvider
• Удобный способ хранения
пользовательских данных
• Автоматическое сохранение и
восстановление коллекции Profile
19
® 2011. EPAM Systems. All rights reserved.
Конфигурирование users, roles, rules
20
® 2011. EPAM Systems. All rights reserved.
Программное конфигурирование membership, users, roles
string userName = "Default User";
string password = string.Empty;
string newPassword = string.Empty;
// Создание новой учётной записи
Membership.CreateUser(userName, password);
// Получение информации об определённом пользователе
MembershipUser user = Membership.GetUser("TheUser");
// Изменить пароль пользователя
user.ChangePassword(user.GetPassword(), newPassword);
// Cбросить пароль (то есть удалить старый и
// автоматически сгенерировать новый)
string newGenPass = user.ResetPassword();
21
® 2011. EPAM Systems. All rights reserved.
Программное конфигурирование membership, users, roles
// Cоздать роли Admin и Guest и
// заполнить их именами пользователей
Roles.CreateRole("Admin");
Roles.AddUserToRole("TheUser", "Admin");
Roles.CreateRole("Guest");
var guests = new[] { "UserX", "Godzilla" };
Roles.AddUsersToRole(guests, "Guest");
// Установливаем, принадлежит ли пользователь к
// определенной роли, и включаем соответствующие функции
if (User.IsInRole("Admin"))
{
// включаем функции, специфические для данной роли
}
22
® 2011. EPAM Systems. All rights reserved.
• Пример
23
® 2011. EPAM Systems. All rights reserved.
Ссылки
24
•
http://msdn.microsoft.com/ru-ru/library/91f66yxt.aspxl — Безопасность в
ASP.NET
•
http://www.asp.net/security/tutorials — Security Tutorials
•
http://www.techdays.ru/videos/1204.html — Безопасность в ASP.NET (©
Гайдар Магдануров)
•
http://www.rsdn.ru/article/inet/aspnet1.xml — Средства безопасности
ASP.NET. Часть 1 – Аутентификация
•
http://www.rsdn.ru/article/inet/aspnet2.xml — Средства безопасности
ASP.NET. Часть 2 - Авторизация
•
http://www.codeproject.com/KB/web-security/FormAuthenticnAuthorizn.aspx
— Form authentication and authorization in ASP.NET
•
http://www.intuit.ru/department/internet/praspnet/18/ —
Программирование на ASP.NET (© Снетков)
•
http://www.iplayerhd.com/playerframe/progressive/1ddb808e-6536-4825944df7a2f5bf2022.aspx?autostart=false&width=768&height=432&cbartype=botto
m — video on ASP.NET Basic authentication
® 2011. EPAM Systems. All rights reserved.
Q&A
® 2011. EPAM Systems. All rights reserved.
Download