4

只是想知道我的以下身份验证方法是否正确。是否有任何陷阱或缺少​​什么?非常欢迎提出建议和讨论。

1> 用户提供用户名和密码,通过RPC发送到服务器。与存储在 DB 中的哈希值进行比较。

2> 假设用户名和密码正确,则在会话中保存一个 Auth Token。访问 servlet 时将检查身份验证令牌。

3> 用户id(整数)通过RPC onSuccess返回给客户端。用户 ID 保存在客户端的静态变量中。

4> 每当需要用户特定信息时,带有用户id(静态变量)的rpc调用将被发送到服务器进行数据库查询。

谢谢

4

3 回答 3

2

您最好将令牌返回给客户端,并验证令牌而不是用户ID。如果使用用户 ID,用户 A 已登录,则另一个用户可以冒充用户 A 向服务器发送请求。您的身份验证方法未能保护数据。

于 2013-09-23T10:02:55.707 回答
2

您无需向客户端发送用户 ID。服务器已经拥有识别用户所需的所有信息。

此代码段创建一个会话 cookie,session.getId()您可以获取它的内容,您应该保存它以识别用户:

HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession(true);

然后,当用户调用您的服务器时,您只需读回会话 ID。

HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession(false);

session.invalidate()您可以销毁会话,也可以在会话中存储对象

this.getThreadLocalRequest()唯一适用于 *Impl 。

于 2013-09-23T10:04:31.097 回答
0

你引用了

3> 用户id(整数)通过RPC onSuccess返回给客户端。用户 ID 保存在客户端的静态变量中。

如果用户刷新他的页面,存储在客户端静态字段中的值将被重置,对吗?在那种情况下,会议会结束吗?并且将提示用户再次登录?

于 2013-09-23T09:36:22.350 回答