Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Хранение пароля на стороне клиента


Автор: Gluttton 26.10.2010, 00:09
Доброго времени суток!

Стою на пороге изобретения велосипеда smile .

Итак. Были БД (Firebird) и web-приложение (Mono). Для аутентификации были переопределены MembershipProvider и RoleProvider, для чего в БД созданы таблицы user, role, membership. Для ограничения пользователей в навигации использован Web.sitemap и соответствующие настрйки web.config. В целом все работало.
Но! Т.к. БД сложная (и важная), то вопрос разграничения прав между пользвателями является не тривиальной задачей (http://forum.vingrad.ru/forum/topic-308089/kw-asp-net-roleprovider-membershipprovider.html).
После долгих раздумий у меня появилось желание возложить задачу контроля прав на СУБД и "транслировать" его (контроль) на уровень web-приложения, т.е. отказаться от использования указанных таблиц user, role, membership, а воспользоваться предоставляемым СУБД сервисом (возможностью создавать пользователей и роли, а самое главное возможностью наделения ролей и пользователей правами).
MembershipProvider и RoleProvider для выполнения поставленной задачи я переписал.
При этом используется следующий сценарий при доступе:
1. Пользователь вводит в web-браузере имя и пароль;
2. От имени пользователя unknown выполняется хранимая процедура на сервере, которая проверяет наличие указанного пользователя;
3. Если указанный пользователь существует, то от его имени для него определяются доступные роли;
4. На основании доступных ролей и Web.sitemap для пользователя отображается соответствующие ссылки;
5. Пользователь осуществляет переход по разрешенным ссылкам используя необходимые для этого роли.
Пункты 1 - 4 реализовать мне удалось, но вот с пунктом 5 у меня возникла проблема. Дело в том, что для переходе по предоставленным ссылкам пользователь обращается к БД от своего имени с различными ролями и для этого необходимо создавать новые подключения, а значит необходимы имя пользователя и пароль имя пользователя я узнаю так:
Код

Page.User.Identity.Name

Роль я определяю по ссылке по которой переходи пользователь. Т.о. остается вопрос как определить пароль?
Вариантов я вижу несколько:
1. Постоянно переспрашивать у пользователя его пароль (ужас - меня найдут и побьют smile );
2. Хранить пароль на стороне клиента и при необходимости отправлять его на СУБД (не уверен, но, по моему, за такое тоже могут побить).

Посоветуйте как быть? И кто вообще что думает по изложенному вопросу?
Буду признателен за любой совет.

Автор: Voyager 26.10.2010, 16:02
А в сессии нельзя хранить пароль?

Автор: Freyzer 26.10.2010, 16:31
А, уровни доступа? Ну, чем выше уровень, тем больше тебе приходиться проходить регистраций, при этом, после прохождения новой регистрации, ты можешь войти на ресур уже под новым уровнем доступа, как такой вариант? Я не советую, я спрашиваю, просто собираюсь на своем сайте нечто подобное сделать, но пока это у меня в теории.

Автор: Gluttton 26.10.2010, 19:38
Цитата(Voyager @  26.10.2010,  16:02 Найти цитируемый пост)
А в сессии нельзя хранить пароль? 

Я не по ASP.NET, я больше по SQL smile , поэтому я не знаю можно или нельзя (а так же на сколько это решение удачно).
Буду признателен если буквально в двух словах поясните приемущество данного способа.

Цитата(Freyzer @  26.10.2010,  16:31 Найти цитируемый пост)
А, уровни доступа?

Уровень доступа определяется ролью.

Цитата(Freyzer @  26.10.2010,  16:31 Найти цитируемый пост)
Ну, чем выше уровень, тем больше тебе приходиться проходить регистраций

Не совсем понял.
В моем случае "переход на уровень вниз" заключается переписыванием MembershipProvider и RoleProvider, что бы запросы направлялись не к пользовательским таблицам, а к системным.

Цитата(Freyzer @  26.10.2010,  16:31 Найти цитируемый пост)
после прохождения новой регистрации, ты можешь войти на ресур уже под новым уровнем доступа, как такой вариант?

С одной стороны да (в плане полномочий), но и нет (в плане реализации).
Я хотел бы сделать так, что бы пользователь проходил аутентификацию единожды, а затем, в течении сеанса, мог бы выбирать для себя любой из разрешенных уровней доступа (ролей в нотаци СУБД).

Автор: Gluttton 27.10.2010, 09:17
Попробовал хранить пароль в сессии.
В целом получается, но наблюдается некоторое не приемлимое для меня поведение (например после закрытия и повторного открытия браузера, если не был явно выполнен выход из под учетной записи, доступ к закрытым данным осуществляется). Я думаю, что это не проблема и нужно бы почитать MSDN.

Автор: Voyager 29.10.2010, 11:13
Gluttton, ну для сессий это нормально, они живут какое-то время (по-умолчанию вроде 20 минут), время жизни можно настроить в Web.config.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)