![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DataSnap (midas) - авторизация
AlexanderSK © (2003-10-13 14:32:00)
Разрабатываю клиент-сервер на базе DataSnap.
Подскажите, пожалуйста, как грамотно реализовать авторизацию пользователя в этой технологии?
Nikolay M. (2003-10-14 18:17:00) [21]
> Reindeer Moss Eater © (14.10.03 16:26) [9]
> Интересный термин..
> Какой?
Challenge-Response
> Если не знать азбуки, то конечно дороже.
То что ты написал в [11] - азбука и есть, не нужно быть семи пядей во лбу, чтобы придумать подобную технологию. Но ты лично готов написать клиента для банка с такой авторизацией, зная, что ошибка в 17 строке или просчет в теории приведет к тому, что у банка уведут немалые суммы денег? Я - нет :(
Reindeer Moss Eater (2003-10-14 17:32:00) [22]
Подскажите, пожалуйста, как грамотно реализовать авторизацию пользователя в этой технологии?
Сервер хранит clear_pass клиента или hash(clear_pass)
Сервер генерит случайное число (Challenge) и отправляет его клиенту.
Клиент вычисляет Hash(clear_pass + случайное_число) и отправляет его серверу.
Сервер сравнивает полученное значение со значением которое вычисляет сам.
Совпало - клиент указал правильный пассворд. Не совпало - пароль неверен.
Перхватывать ответ клиента бесполезно, так как он годен только для конкретного значения Challenge сервера; Значение Challenge должно быть криптографичекого качества случайным.
Против атак по словарю готовых хеш-значений паролей обе стороны могут примешивать SALT VALUE ("соль", произвольное постоянное значение выбираемое при инсталяции системы)
AlexanderSK (2003-10-14 17:18:00) [23]
>Nikolay M. © (14.10.03 16:17) [8]
>Естественно сервер. Точнее, фабрика класса, но тебе об этом заботиться не нужно - создастся само.
т.е. Есть сервер, на нем есть недоступные извне RDM и если авторизация прошла успешно, клиент получает ссылку на интерфейс этого недоступного RDM. я правильно понимаю?
Reindeer Moss Eater (2003-10-14 16:26:00) [24]
Интересный термин..
Какой?
Имхо, понятно, что обсуждаемый момент зависит от области применения программы. В небольшой локалке можно простой хэш.
А чем простой хеш отличается от сложного?
И чем простой хеш отличается от clear password?
А для какого-нибудь банка я бы вообще не рискнул такое делать - себе дороже потом выйдет...
Если не знать азбуки, то конечно дороже.
Nikolay M. (2003-10-14 16:17:00) [25]
> Reindeer Moss Eater © (14.10.03 09:16) [6]
Интересный термин..
Имхо, понятно, что обсуждаемый момент зависит от области применения программы. В небольшой локалке можно простой хэш. А для какого-нибудь банка я бы вообще не рискнул такое делать - себе дороже потом выйдет...
> AlexanderSK (14.10.03 16:08) [7]
Естественно сервер. Точнее, фабрика класса, но тебе об этом заботиться не нужно - создастся само.
AlexanderSK (2003-10-14 16:08:00) [26]
>Nikolay M. (13.10.03 15:14) [2]
А кто и как создает тот RDM с которым будет работать клиент?
Reindeer Moss Eater (2003-10-14 09:16:00) [27]
А если хэш делать каждый раз разный + случайное число на клиенте + хэш зависит от случайного числа, выдаваемого сервером?
Это будет называеться Challenge-Response. И будет сильно отличаться от описанного в [2]
Nikolay M. (2003-10-13 19:19:00) [28]
> Reindeer Moss Eater © (13.10.03 15:19) [3]
Угу, конечно, ловится. А если хэш делать каждый раз разный + случайное число на клиенте + хэш зависит от случайного числа, выдаваемого сервером?
> AlexanderSK (13.10.03 16:24) [4]
Пример чего?
AlexanderSK (2003-10-13 16:24:00) [29]
>Nikolay M. ©
А какой-нибудь примерчик с кодом, если не трудно?
Reindeer Moss Eater (2003-10-13 15:19:00) [30]
передается, кстати, не собственно пароль, а его хэш, чтобы траффик по сети не отследить
1.Трафик при этом отслеживается как и в случае с открытым паролем.
2. Перехваченный однажды хеш пароля остается дейставительным для последующих попыток логона.
Nikolay M. (2003-10-13 15:14:00) [31]
Я делаю так: делаю на сервере новый интерфейс с методом function LogonUser (login, password_hash : string) : IMyRemoteDataModule;
Который вызывается из клиента (передается, кстати, не собственно пароль, а его хэш, чтобы траффик по сети не отследить). Если логон прошел нормально (в моей табличке юзеров есть такая пара логин-пароль и этот пользователь не работает в данный момент в системе), значит выдается ссылка на интерфейс RDM. Если что-то не так, генерирум исключение.
Плюс желательно для каждого пользователя хранить его права (для простоты, пусть это будет строка вида YYNNYYNNNNYYY, где каждый символ на определенном месте отвечает за разрешенность совершения некоторого действия) и считывать их в нек. переменную при логоне. А при непосредственном выполнении того или иного действия проверять эту переменную на разрешенность совершения этого действия.
Вкратце так. Может чего лишнего намудрил, но пока не вижу где :)
Polevi (2003-10-13 15:09:00) [32]
реализовать метод Login в COM-сервере