注销一个无状态的应用程序

时间:2016-08-30 23:25:21

标签: rest security stateless

这是我的项目结构的样子

  • UI:AngularJS app
  • 后端:Java + MongoDB无状态应用

UI对给定用户进行身份验证,REST api使用JWT令牌进行响应。对于每个后续请求,REST api都需要标头中的标记,如果不存在,则返回Unautorized错误。

现在,实施logoff功能的最佳方法是什么?有一点很清楚,我将从UI cookie中删除令牌。但我需要告诉服务器用户已注销。

我正在考虑维护一个内存数据库,以便跟踪已登录的用户,并在用户注销后将其从内存中删除但是它会使应用程序处于某种状态(我猜)。此外,缩放应用程序可能会变得很复杂,因为我必须在所有节点上复制内存中用户。

对于每个REST调用,我从MongoDB获取用户详细信息。使用DB存储登录状态是否有意义?我只是在大声思考。因为我不知道要去哪个方向。

1 个答案:

答案 0 :(得分:1)

如果您使用JWT维护会话客户端,那么服务器应该没有登录和注销用户的概念。

这是您决定使用JWT所支付的价格(当然可能会很好,具体取决于您对申请的风险偏好)。

如果您希望将用户从服务器端注销,那么您应该废弃JWT模型并记录服务器端的会话。这样,您可以在注销时删除服务器端记录以及cookie。