Bal*_*usC 33
所以你真的想要一个"在这台电脑上记住我"选项吗?这实际上与OpenID部分无关.这是一种与语言无关的方法:
首先,创建至少一个数据库表cookie_id和user_id列.如果有必要还添加一个cookie_ttl和ip_lock.我想这些列名称本身就说明了一切.
在第一次登录(如果必要的话只能用"记住我"选项选中),产生一个长期的,独特的,难以猜测密钥(这是在没有办法与用户),它代表了cookie_id和其存储在数据库连同user_id.存储cookie_id具有已知cookie名称的cookie的cookie值,例如remember.给cookie一个很长的寿命,例如一年.
在每个请求中,检查用户是否已登录.如果没有,则检查cookie_id与cookie名称关联的cookie值remember.如果它存在且根据数据库有效,则自动登录与之关联的用户user_id并再次推迟cookie年龄,如果有的话,也在cookie_ttl数据库中.
在Java/JSP/Servlet术语中,使用HttpServletResponse#addCookie()添加cookie并HttpServletRequest#getCookies()获取cookie.您可以进行所有首次检查,以Filter监听所需的资源,例如/*或者可能更受限制.
关于会话,你在这里不需要它.它的寿命比您需要的短.仅在登录用户或"找到"用户拥有有效remembercookie 时使用它.这样就Filter可以检查它在会话中的存在,然后不需要每次都检查cookie.
毕竟这是相当直接的.祝好运.
好吧,我选择OpenID的原因是其他人可以为我处理尽可能多的身份验证实现和安全性.
在更多地研究OpenID之后,似乎有一种叫做"立即请求"的东西(http://openid.net/specs/openid-authentication-2_0.html#anchor28).
请求身份验证时,依赖方可以请求OP不与最终用户交互.在这种情况下,OP必须立即响应认证成功的断言,或者指示在没有进一步的用户交互的情况下无法完成请求的响应.
因此,我认为我可以将用户的openID url存储在cookie中,并使用立即请求来查看用户是否经过身份验证.这样我就不必对我的数据库做任何事情,或者实现任何逻辑来防止对长期存在的cookie进行会话劫持.
这种方法似乎是OpenID建议使用其依赖方最佳实践文档的方式.
| 归档时间: |
|
| 查看次数: |
9906 次 |
| 最近记录: |