Создание веб-приложения, сочетающего в себе проектирование и создание баз данных, работу со сторонними форматами данных, программирование в NET и веб-разработку, страница 17

Авторизация же, представляющая собой предоставление прав, выполняется в ходе запроса пользователем определенного документа. Права доступа для различных пользователей и групп прописываются в файле Web.config в разделе <authorization>. Стоит учесть, что настройки авторизации длякаждого подкаталога могут различаться, для чего в этом подкаталоге создается свой файл Web.config. В данном проекте создано 2 файла Web.config. Один из них устанавливает правила авторизации для корневого каталога и его содержимого. Второй находится в подкаталоге /account и разрешает доступ неавторизованным пользователям лишь к странице регистрации и авторизации. С полным текстом файла Web.config можно ознакомиться в Приложении 2.

2.1.3  Шифровка/дешифровка паролей

.Хранение паролей в базе данных в первозданном виде является небезопасным. В случае получения несанкционированного доступа к базе или sql-инъекции, профили пользователей могут быть взломаны. Для устранения подобной уязвимости пароли в базе хранятся в зашифрованном виде.

Для реализации подобного в .NET реализованы специализированные методы:

Ø byte[] EncryptPassword(byte[] password)

//осуществляет шифрование выбранной строки. Возвращает массив байтов, которые содержат зашифрованный пароль.

Ø byte[] DecryptPassword(byte[] encodedPassword)

//осуществляет дешифровку выбранной строки. Возвращает массив байтов, которые содержат расшифрованный пароль.

Т.к. оба метода работают с массивами байтов, а данные, введенные пользователем для пароля и данные, хранящиеся в базе представляют собой строку, необходим еще один метод – получение из строки массива байтов и из массива байтов – строки. Данные методы реализованы в .NET в пространстве имен System.Text.

Ø byte[] GetBytes(string s)

//в качестве входных параметров получает строку, которую преобразуется в массив байт и возвращается в качестве возвращаемого значения.

Ø string GetString(byte[] b)

//в качестве входных параметров получает массив байт, который преобразуется в строку и возвращается в качестве возвращаемого значения.

Вызов данных методов осуществляется через класс, представляющий кодировку символов - Encoding.

Пример: Encoding.Default.GetBytes(bytes);

Только после приведения данных в нужный формат можно использовать методы шифровки и дешифровки.

В данном проекте используется следующий алгоритм:

Запись пароля в БД – преобразование пароля в массив байт, шифровка, преобразование полученного массива в строку и запись этой строки в БД.

Считывание пароля из БД – считывание строки, преобразование строки в массив байтов, дешифровка, преобразование получившегося массива байтов в строку.

Для использования функций шифрования необходимо указать ключи, которые используются при шифровке и дешифровке. Данные ключи можно указать в файле Web.config в разделе <machineKey>. С текстом файла можно ознакомиться в Приложении 2.

2.1.4  Роли пользователей.

Основной целью задания ролей является обеспечение удобного способа управления правилами доступа для групп пользователей. Вы создаете пользователей, а затем назначаете их ролям. Обычно затем создается набор страниц, доступ к которым должны иметь только определенные пользователи. Часто эти страницы помещаются в отдельную папку. После этого можно задать правила, предоставляющие и запрещающие доступ к запрещенным папкам. Например, можно настроить веб-узел таким образом, чтобы члены или руководители имели доступ к страницам в запрещенной папке, а все остальные пользователи — нет. Если неавторизованный пользователь попытается просмотреть запрещенную страницу, то он увидит сообщение об ошибке или будет перенаправлен на указанную вами страницу[4].

Для реализации управления ролями вASP.NET по умолчанию используется класс RoleProvider. Как и класс MembershipProvider он может быть унаследован и переопределен, что мной и было сделанной, в результате чего был создан класс PowerPlayRolesProvider.