GWT аутентифицированный пользовательский сеанс - PullRequest
0 голосов
/ 16 октября 2011

Мое веб-приложение состоит из 2 частей:

  1. GWT приложение, которое делает всю работу.
  2. Ручной сервлет, предназначенный для обработки средств аутентификации OpenID.

Мне нужно подключить п.2 к п.1. Я читаю LoginSecurityFAQ , поэтому я хотел бы подтвердить правильность моего понимания здесь.

  1. Как только провайдер OpenID подтвердит, что пользователь в порядке и предоставит мне свою личность, я должен зарегистрировать сеанс.
  2. Чтобы "зарегистрировать" сеанс, я должен где-то в моей БД сохранить отображение между идентификатором OpenID и идентификатором сеанса (identity = "https://www.google.com/accounts/o8/id?id=wwyruiwncuyrwieruyfakefakefake", а идентификатор сеанса представляет собой большую случайную строку, такую ​​как" HiuhoiuhIUHOIUY87Y * & Ttgi6yUYGIuygUHGugyg ^ G6g ") .
  3. Этот идентификатор сеанса должен храниться на стороне клиента в файле cookie.
  4. Каждый раз, когда любой запрос отправляется со стороны клиента, на стороне сервера я должен проверить, является ли идентификатор сеанса клиента все еще достаточно свежим (живым), и я должен также использовать его для определения личности клиента в случае необходимости.

Это правильно? Достаточно ли он безопасен в случае, если идентификатор сессии действительно велик?

1 Ответ

1 голос
/ 16 октября 2011

Ваше мышление верно, я делаю это более или менее так же.

Всего несколько заметок:

1) Если вы хотите сохранить идентичность, не забудьте установить правильную область. В зависимости от провайдера OpenID, вы можете получить другую идентификационную информацию для того же пользователя при следующем входе в систему. Я думаю, что OpenID Google требует от вас использовать имя вашего сервера плюс порт:

openIdManager.setRealm("http://" + req.getServerName() + ":" + req.getServerPort());

2) Зачем создавать собственное управление сессиями? Это довольно много дополнительной работы, и вы можете написать что-то небезопасное. Используйте обычные сеансы http сервлета.

3) Вам не нужно управлять тайм-аутами сеансов, если вы используете сеансы http, но если вам нужно перехватить все вызовы GWT RPC, в вашей реализации RemoteServiceServlet может оказаться нужным переопределить метод service .

...