Форум: "Сети";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
ВнизDataSnap (midas) - авторизация Найти похожие ветки
← →
AlexanderSK (2003-10-13 14:32) [0]Разрабатываю клиент-сервер на базе DataSnap.
Подскажите, пожалуйста, как грамотно реализовать авторизацию пользователя в этой технологии?
← →
Polevi (2003-10-13 15:09) [1]реализовать метод Login в COM-сервере
← →
Nikolay M. (2003-10-13 15:14) [2]Я делаю так: делаю на сервере новый интерфейс с методом function LogonUser (login, password_hash : string) : IMyRemoteDataModule;
Который вызывается из клиента (передается, кстати, не собственно пароль, а его хэш, чтобы траффик по сети не отследить). Если логон прошел нормально (в моей табличке юзеров есть такая пара логин-пароль и этот пользователь не работает в данный момент в системе), значит выдается ссылка на интерфейс RDM. Если что-то не так, генерирум исключение.
Плюс желательно для каждого пользователя хранить его права (для простоты, пусть это будет строка вида YYNNYYNNNNYYY, где каждый символ на определенном месте отвечает за разрешенность совершения некоторого действия) и считывать их в нек. переменную при логоне. А при непосредственном выполнении того или иного действия проверять эту переменную на разрешенность совершения этого действия.
Вкратце так. Может чего лишнего намудрил, но пока не вижу где :)
← →
Reindeer Moss Eater (2003-10-13 15:19) [3]передается, кстати, не собственно пароль, а его хэш, чтобы траффик по сети не отследить
1.Трафик при этом отслеживается как и в случае с открытым паролем.
2. Перехваченный однажды хеш пароля остается дейставительным для последующих попыток логона.
← →
AlexanderSK (2003-10-13 16:24) [4]>Nikolay M. ©
А какой-нибудь примерчик с кодом, если не трудно?
← →
Nikolay M. (2003-10-13 19:19) [5]
> Reindeer Moss Eater © (13.10.03 15:19) [3]
Угу, конечно, ловится. А если хэш делать каждый раз разный + случайное число на клиенте + хэш зависит от случайного числа, выдаваемого сервером?
> AlexanderSK (13.10.03 16:24) [4]
Пример чего?
← →
Reindeer Moss Eater (2003-10-14 09:16) [6]А если хэш делать каждый раз разный + случайное число на клиенте + хэш зависит от случайного числа, выдаваемого сервером?
Это будет называеться Challenge-Response. И будет сильно отличаться от описанного в [2]
← →
AlexanderSK (2003-10-14 16:08) [7]>Nikolay M. (13.10.03 15:14) [2]
А кто и как создает тот RDM с которым будет работать клиент?
← →
Nikolay M. (2003-10-14 16:17) [8]
> Reindeer Moss Eater © (14.10.03 09:16) [6]
Интересный термин..
Имхо, понятно, что обсуждаемый момент зависит от области применения программы. В небольшой локалке можно простой хэш. А для какого-нибудь банка я бы вообще не рискнул такое делать - себе дороже потом выйдет...
> AlexanderSK (14.10.03 16:08) [7]
Естественно сервер. Точнее, фабрика класса, но тебе об этом заботиться не нужно - создастся само.
← →
Reindeer Moss Eater (2003-10-14 16:26) [9]Интересный термин..
Какой?
Имхо, понятно, что обсуждаемый момент зависит от области применения программы. В небольшой локалке можно простой хэш.
А чем простой хеш отличается от сложного?
И чем простой хеш отличается от clear password?
А для какого-нибудь банка я бы вообще не рискнул такое делать - себе дороже потом выйдет...
Если не знать азбуки, то конечно дороже.
← →
AlexanderSK (2003-10-14 17:18) [10]>Nikolay M. © (14.10.03 16:17) [8]
>Естественно сервер. Точнее, фабрика класса, но тебе об этом заботиться не нужно - создастся само.
т.е. Есть сервер, на нем есть недоступные извне RDM и если авторизация прошла успешно, клиент получает ссылку на интерфейс этого недоступного RDM. я правильно понимаю?
← →
Reindeer Moss Eater (2003-10-14 17:32) [11]Подскажите, пожалуйста, как грамотно реализовать авторизацию пользователя в этой технологии?
Сервер хранит clear_pass клиента или hash(clear_pass)
Сервер генерит случайное число (Challenge) и отправляет его клиенту.
Клиент вычисляет Hash(clear_pass + случайное_число) и отправляет его серверу.
Сервер сравнивает полученное значение со значением которое вычисляет сам.
Совпало - клиент указал правильный пассворд. Не совпало - пароль неверен.
Перхватывать ответ клиента бесполезно, так как он годен только для конкретного значения Challenge сервера; Значение Challenge должно быть криптографичекого качества случайным.
Против атак по словарю готовых хеш-значений паролей обе стороны могут примешивать SALT VALUE ("соль", произвольное постоянное значение выбираемое при инсталяции системы)
← →
Nikolay M. (2003-10-14 18:17) [12]
> Reindeer Moss Eater © (14.10.03 16:26) [9]
> Интересный термин..
> Какой?
Challenge-Response
> Если не знать азбуки, то конечно дороже.
То что ты написал в [11] - азбука и есть, не нужно быть семи пядей во лбу, чтобы придумать подобную технологию. Но ты лично готов написать клиента для банка с такой авторизацией, зная, что ошибка в 17 строке или просчет в теории приведет к тому, что у банка уведут немалые суммы денег? Я - нет :(
← →
Nikolay M. (2003-10-14 18:19) [13]
> AlexanderSK (14.10.03 17:18) [10]
Абсолютно верно.
← →
Reindeer Moss Eater (2003-10-15 08:45) [14]Nikolay M. ©
1. Это действительно азбука и изобретена действительно не мной.
А вот пользуются этой азбукой все.
2. А я -да.
← →
Nikolay M. (2003-10-15 10:02) [15]
> Reindeer Moss Eater © (15.10.03 08:45) [14]
Ну, рад за тебя. Я бы на себя такую ответственность не взял. Не от неуверенности в себе или незнания сути вопроса, а слишком больших потерь в случае неудачи - оно мне надо? Если только за достаточно большие деньги.
← →
Reindeer Moss Eater (2003-10-15 10:20) [16]Не от неуверенности в себе или незнания сути вопроса, а слишком больших потерь в случае неудачи - оно мне надо?
Представляешь, а ты ведь однажды умрешь. Это достаточно большая потеря для тебя.
← →
Nikolay M. (2003-10-15 10:39) [17]
> Reindeer Moss Eater © (15.10.03 10:20) [16]
Не, это будет потерей для остальных :)))
← →
AlexsanderSK (2003-10-15 16:46) [18]>Nikolay M. © (14.10.03 18:19) [13]
А как тогда это реализовать? т.е. сделать не доступные из вне RDM, чтобы потом их интерфейс можно было отдать наружу?
← →
Nikolay M. (2003-10-16 10:11) [19]Что мешает сделать два RDM и один создавать вручную?
← →
AlexanderSK (2003-10-16 11:00) [20]>Nikolay M. © (16.10.03 10:11) [19]
>Что мешает сделать два RDM и один создавать вручную?
А как и когда его в ручную создавть? И как запретить мерверу самому создавать 2-ой RDM?
← →
AlexanderSK (2003-10-16 11:25) [21]т.е. И как запретить серверу самому создавать 2-ой RDM?
← →
Nikolay M. (2003-10-16 16:11) [22]Посмотри, что написано в rdm.pas в секции initialization.
← →
AlexanderSK (2003-10-16 17:09) [23]>Nikolay M. © (16.10.03 16:11) [22]
А как потом создать нужный RDM?
т.е. как должн выглядеьт код метода - function LogonUser (login, password_hash : string): IMyRemoteDataModule; в той его части где возвращается IMyRemoteDataModule?
← →
Nikolay M. (2003-10-16 18:03) [24]Может, это и изврат, но можно так:
в новом RDM в RemoteDataModuleCreate сохранить self в потоко-защищенном списке (TThreadList) и из начального модуля возвращать потом его клиенту.
← →
AlexanderSK (2003-10-17 15:34) [25]А нет ли какого-нибудь штатного метода авторизации?
← →
Nikolay M. (2003-10-19 11:50) [26]AFAIK, нет.
Опять же все зависит от того, какого уровня защита тебе нужна. Если требуется не дать чайнику зайти в твою программу без авторизации, то извращения с вторичными RDM не нужны, достаточно одного, в котором и будет LogonUser, соответственно юзер дальше либо идет, либо получает в лоб.
А если нужно исключить возможность написания Васей Криворучко подставного клиента для твоего AppServer-а, тогда все-таки нужно несколько RDM, процедура авторизации как сказано мной и Reindeer Moss Eater (запрос с сервера-ответ с клиента, генерация хэша в зависимости от случайного числа, серийника вина и макадреса и тд, и тп).
Возможно, конечно, что в сети что-нибудь подобное лежит или описан хотя бы алгоритм - не ты же первый озадачился такой проблемой. Если найдешь, не поленись, плз, скинь в эту ветку или на мыло/аську?
← →
Reindeer Moss Eater (2003-10-20 08:55) [27]Алгоритм в [11]
← →
Nikolay M. (2003-10-20 11:07) [28]
> Reindeer Moss Eater © (20.10.03 08:55) [27]
В [11] - там все на пальцах, я имел в виду, что может попробовать найти UML-диаграмму готовой реализации с кусками кода, но это, конечно, халява :)
← →
AlexanderSK (2003-10-20 15:53) [29]А как всетаки запретить пользователю лоступ к RDM?
← →
Nikolay M. (2003-10-20 16:31) [30]Тебе ж дали уже два метода - чем не устраивают?
Если нужно совсем не дать доступа, то в OnCreate RDM-а делать сразу Free - вот и не будет ему доступа.
← →
VIR (2003-10-25 09:06) [31]А как можно применять авторизацию Windows?
← →
Nikolay M. (2003-10-25 18:29) [32]
> А как можно применять авторизацию Windows?
Соединятсья с апп-сервером не через сокеты, а через DCOM.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.008 c