V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pengfei
V2EX  ›  程序员

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

  •  
  •   pengfei · 2017-09-20 17:49:22 +08:00 · 2756 次点击
    这是一个创建于 2621 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    最近正在用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 做认证差不多了, 有没有其他解决方式
    5 条回复    2017-09-21 12:24:36 +08:00
    Athrob
        1
    Athrob  
       2017-09-21 07:27:17 +08:00
    我也想知道, 目前我是在服务端缓存了 token 的部分信息的. 每次请求都判断是否合法.
    pengfei
        2
    pengfei  
    OP
       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
        3
    Athrob  
       2017-09-21 10:17:35 +08:00
    @pengfei #2 他说的无状态应该是不靠服务端来获取用户状态, 而是直接存在 token 里, 是这样吗?
    session 的话还要根据 session id 去服务器获取用户状态.
    Athrob
        4
    Athrob  
       2017-09-21 10:21:13 +08:00
    对这些概念不是很了解, 能完成需求就好吧, 不要太在意标准.
    pengfei
        5
    pengfei  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:22 · PVG 20:22 · LAX 04:22 · JFK 07:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.