Сеанс пользователя с аутентификацией GWT

#java #session #gwt #openid

#java #сеанс #gwt #OpenID

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

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

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

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

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