REST API - 以无状态方式管理用户会话

时间:2014-12-15 13:21:00

标签: php rest codeigniter-restserver

对于你们许多人来说,这可能是微不足道的,但我还没有运气来理解我的用例的正确流程。我正在为我们的移动应用程序(IOS和Android)构建API,并且与大多数Web应用程序一样,API具有某些功能/页面(就网站而言),只能由登录用户访问。由于API构造中通常不鼓励会话,我想知道如何在API中跟踪这些内容。我的问题是,我如何确定:

  1. 用户从客户端登录。因此,当用户通过发送他/她的用户名和密码登录时,服务器端在从DB验证之后授权用户。在这一点上,我应该向客户发送什么,它需要向我发送每个请求以便将来识别?
  2. 确保我收到真实用户的请求...例如,用户A无法询问用户的B信息。换句话说,我在想的是,如果我基于UserID(或者某些令牌,因为它也必须加密一些)来做事情,那么有人可能以某种方式破坏我的安全性并为另一个用户的ID请求内容......我如何确保这一点?
  3. 基本上,我正在寻找一些以无状态方式维持国家的指导。

2 个答案:

答案 0 :(得分:1)

在用户成功通过身份验证后尝试发送session_id。 这可能是由当前时间戳记的user_name的md5哈希创建的。

在服务器端I,您可以创建一个表session_data(session_id,user_id,last_access_time,session_data),它将session_id映射到用户。在last_access_time变旧之后,会话将变得过时。

这种方法不适合强烈的用户交互,因为您必须在每次请求后更新session_data。

在这种情况下,这样的表可以在任何快速存储中移动。

答案 1 :(得分:0)

在API开发中没有像登录状态等那样的概念......这就是为什么它是无状态的。您必须对每个请求进行身份验证(因此请在每次请求时发送用户名和密码)。

注意:您可以拥有会话,但它由REST客户端维护,因此API不知道任何内容。