|
Покритикуйте архитектуру (интересует аутентификация)
|
|||
---|---|---|---|
#18+
Есть некая высоконагруженная система, работающая с конфиденциальными данными, следующей структуры: БД (I)<--->REST Web Service (II) <--SSL--->Web Site (III) REST Service, Web Site - выполнены как stateless (обязательное требование, т. к. прийдется прибегать к балансировке нагрузки). Аутентификация выполняется следующим образом: БД (I)<--->REST Web Service (II) <--SSL--->Web Site (III) Будем считать, что узел (I) имеет некоторую табличку USER_ACCOUNT(ID_USER_ACCOUNT (PK), SESSION_KEY (UK), LAST_TIME, LOGIN (UK), PASS, ...) Узел III: 1) Пользователь перенаправляется по HTTPS на страничку ввода логин/пароль 2) Вводит login/password. Делается Postback формы по нажатию на кнопку login. 3) Серверный код страницы получает в пределах HTTPS сессии логин/пароль 4) Делает HTTPS GET запрос к узлу (II) передавая логин/пароль Узел II: 5) Делает запрос к БД (узел I), к таблице USER_ACCOUNT, определяя существование login/password 6) В случае успеха генерирует SessionKey и делает UPDATE таблицы USER_ACCOUNT в соответствующей строке. В случае если пользователя не существует или пароль неверен, возвращает узлу (III) пустую строку. 7) Возвращает узлу (III) SessionKey Узел III: 8) В случае получения SessionKey, пользователь перенаправляется на соответствующую страницу - личный кабинет (со спрятанным в HiddenInput SessioonKey'ем). 9) Далее этот SessionKey гоняется туда/сюда между постбэками и учавствует в GET запросах к узлу (II) по HTTPS. --- 10) При каждом обращении к узлу (II) в табличке USER_ACCOUNT обновляется LAST_TIME - время последнего обращения. 11) Периодически - раз в пять минут запускается системная служба или JOB БД, который проверяет время LAST_TIME и если последнее обращение было более десяти минут назад, делается обновление поля SESSION_KEY соответствующей строки на NULL. И сессии больше не существует. Поидее все узлы (II), (III) в этом случае будут stateless. Не дырява ли такая защита. Кто что думает. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 21:46 |
|
Покритикуйте архитектуру (интересует аутентификация)
|
|||
---|---|---|---|
#18+
ИМХО, вот это: 6) В случае успеха генерирует SessionKey и делает UPDATE таблицы USER_ACCOUNT в соответствующей строке. В случае если пользователя не существует или пароль неверен, возвращает узлу (III) пустую строку. не позволит пользователю начать новую сессию одновременно с существующей. Также не совсем понятно, что произойдет, когда пользователь прикроет браузер и стартанет новую сессию до момента завершения существующей сессии по тайм-ауту ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2010, 17:49 |
|
|
start [/forum/topic.php?fid=33&fpage=29&tid=1548157]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 423ms |
0 / 0 |