我的网络应用程序由两部分组成:
- GWT 应用程序可以完成所有工作。
- 手工制作的 servlet 旨在处理 OpenID 身份验证工具。
我需要将 p.2 连接到 p.1。我正在阅读LoginSecurityFAQ ,所以我想在这里确认一下我的理解是否正确。
- 一旦 OpenID 提供商确认用户正常并向我提供其身份,我就应该注册 session 。
- 要“注册” session ,我应该在数据库中的某个位置存储 OpenID 身份和 session ID 之间的映射 (identity="https://www.google.com/accounts/o8/id?id=wwyruiwncuyrwieruyfakefakefake" session ID 是一个很大的随机字符串,例如“HiuhoiuhIUHOIUY87Y*&Ttgi6yUYGIuygUHGugyg^G6g”)。
- 该 session ID 应存储在客户端的 Cookie 中。
- 每次从客户端发送任何请求时,在服务器端,我都应该检查客户端的 session ID 是否仍然足够新鲜( Activity ),并且我还应该使用它来解析客户端的身份,以备不时之需。
是吗?如果 session ID 很大,是否足够安全?
最佳答案
你的想法是对的,我也或多或少是这样做的。
几点说明:
1) 如果您想保留身份,请不要忘记正确设置领域。否则,根据 OpenID 提供商的不同,同一用户下次登录时可能会得到不同的身份。我认为 Google 的 OpenID 要求您使用服务器名称加端口:
openIdManager.setRealm("http://" + req.getServerName() + ":" + req.getServerPort());
2) 为什么要创建自己的 session 管理?这是相当多的额外工作,您最终可能会写出一些不安全的东西。使用通用的 http servlet session 。
3) 如果您使用 http session ,则无需管理 session 超时,但如果您需要拦截所有 GWT RPC 调用,则正确的位置可能是重写 RemoteServiceServlet 实现中的 service 方法.
关于java - GWT 验证的用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784654/