Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.012 c
1-75182
NeedHELP
2003-12-11 15:53
2003.12.23
Incompatible types: WideString and PAnsiChar


14-75349
Vorobyev Sergey
2003-11-27 15:47
2003.12.23
Меняется тональность и громкость шума из-за процессора (!!!)


3-75129
Vick
2003-12-01 13:19
2003.12.23
Преобразование vrabinary в varchar


1-75157
Sliften
2003-12-08 20:15
2003.12.23
Как поменять какое-нибудь значение у всех нужных компонентов прил


1-75228
VitGun
2003-12-09 19:11
2003.12.23
Построение сети Петри