采用 Tokens 认证的接口如何保证服务端和客户端的一致性

2017-09-20 17:49:22 +08:00
 pengfei

标题不是很明确, 请看描述

最近正在用spring boot + Vue.js 撸一个 web 应用, 想省点事将webapp共用一个后台, 用户认证部分采用服务端生成 tokens 的方式实现. tokens 参照 jwt 标准生成. 遇到两个问题不知道怎么解决

  1. 在服务端生成 token 时设定超时时间, 用户在超时范围内一直在不间断使用的话, 到了超时的时候服务器要不要为客户端生成新的 token, 并且服务器如何确定是真的客户端在使用, 而不是其他人通过网络手段获取某客户端的 token 从而一直在使用
  2. 客户端主动退出登录, 之前的 token 对于服务器来说, 只要在超时范围内就一直生效, 如何在服务端禁用

暂时应对方法:

  1. 忽略, 超时就是超时
  2. 在 server 端生成 jwt 时有一个 jti 是其唯一身份标识, 缓存该标识, 收到客户端退出请求时, 通过 jti 对 token 处理, 但是这样的话就得在 server 端存储 token 部分信息, 就感觉和 session 做认证差不多了, 有没有其他解决方式
2773 次点击
所在节点    程序员
5 条回复
Athrob
2017-09-21 07:27:17 +08:00
我也想知道, 目前我是在服务端缓存了 token 的部分信息的. 每次请求都判断是否合法.
pengfei
2017-09-21 09:40:55 +08:00
@Athrob 感觉这样做有点和 jwt 的标准相悖了 不知道大佬们有木有更好的解决方法
> This is a stateless authentication mechanism as the user state is never saved in server memory
Athrob
2017-09-21 10:17:35 +08:00
@pengfei #2 他说的无状态应该是不靠服务端来获取用户状态, 而是直接存在 token 里, 是这样吗?
session 的话还要根据 session id 去服务器获取用户状态.
Athrob
2017-09-21 10:21:13 +08:00
对这些概念不是很了解, 能完成需求就好吧, 不要太在意标准.
pengfei
2017-09-21 12:24:36 +08:00
@Athrob 现在的做法也是这样, 没接触过互联网项目, 只能采用传统的做法了. 网上搜了下, 感觉自己钻牛角尖了, jwt 这种方式保证了任何客户端的请求都携带了能够证明自己的信息, 只要我们将服务器端缓存 jti 的部分能让所有 server 能关联, 那也变相的实现: 客户端各个请求独立并包含所有目标服务器所理解的请求信息

> Client 发送的请求必须包含有能够让服务器理解请求的全部信息,包括自己的状态信息。使得一个 Client 的 Web 请求能够被任何可用的 Server 应答,从而将 Web 系统扩展到大量的 Client 中
-- http://blog.csdn.net/Jmilk/article/details/50461577

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX