主页

QQ网名

弹出
  • QQ网名
  • 说说
  • 句子
  • 音乐
  • 情书
  • 祝福语
  • 热梗
  • 百科
  • jwt的token机制原理(jwt与token+redis,哪种方案更好用)

    栏目: 百科 日期:2023-09-04 04:00:18 浏览量(

    [摘要]jwt与token+redis,哪种方案更好用?jwt与token+redis是两种常见的无状态认证方案,它们各有优缺点,适用于不同的场景。jwt是一种基于JS...

    jwt与token+redis,哪种方案更好用?

    jwt与token+redis是两种常见的无状态认证方案,它们各有优缺点,适用于不同的场景。

    jwt是一种基于JSON的开放标准,用于在双方之间安全地传输信息。jwt由三部分组成:头部、有效载荷和签名。头部包含了加密算法和令牌类型;有效载荷包含了一些声明,如用户标识、过期时间等;签名是对前两部分的加密,用于防止篡改。

    token+redis是一种基于令牌和缓存的认证方案,用于在服务端存储用户信息和状态。token是一个随机生成的字符串,用于标识用户身份;redis是一个高性能的内存数据库,用于存储token和用户信息的映射关系。

    jwt与token+redis的对比如下:

    jwt的优点是去中心化,不需要在服务端存储用户信息,减轻了服务器压力,便于分布式系统使用;缺点是一旦下发,服务端无法主动让token失效,如果发生token泄露,服务器也只能任其蹂躏,在其未过期期间不能有任何措施。另外,jwt的请求头体积较大,加解密效率也较低。token+redis的优点是服务端可以主动让token失效,可以实现注销登录、踢人下线等功能;缺点是依赖内存或redis存储,分布式系统的话,需要redis查询/接口调用增加系统复杂性。另外,token+redis需要维护会话状态,与RESTful原则相悖。

    综上所述,jwt与token+redis哪种方案更好用,要根据具体的业务需求和场景来决定。如果对用户管理要求比较严格,或者需要实现一些会话相关的功能,可以使用token+redis方案;如果对用户管理要求比较宽松,或者需要实现一些无状态的功能,可以使用jwt方案。

    jwt与token+redis,哪种方案更好用?

    1. 问题描述

    jwt与token+redis,哪种方案更好用?

    问题结论

    刚好最近有项目使用了jwt,而且是定制化的jwt的认证机制,就个人的理解而言,各自有其优缺点,并且针对不同的场景需要进行约束性开发,如用户剔除、同一用户每2h只生成一次jwt等。

    2. Token机制简述

    2.1 Token的用途

    用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。

    在存储的时候把token进行对称加密存储,用到的时候再解密。文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。

    2.2 token+redis机制

    用户验证通过后,服务端通过如uuid相关的方法,生成token,存储用户信息。当请求服务时,客户端将token带上来,进行查询验证,如token存在并在有限期内,请求有效,否则请求非法。

    token + redis机制是中心化的,每次验证token有效性时,都需要访问redis,其核心优点实服务端可以主动让token失效,缺点是每次都要进行redis查询。占用redis存储空间。

    2.3 jwt机制

    这是一种无状态身份验证机制,因为用户状态永远不会保存在服务器内存中。 服务器受保护的路由将在授权头中检查有效的JWT,如果存在,则允许用户访问受保护的资源。 由于JWT是独立的,所有必要的信息都在那里,减少了多次查询数据库的需求。

    Java jwt普遍选用java-jwt工具包依赖,gradle依赖:compile "com.auth0:java-jwt:3.2.0"用户发起登录请求,验证通过后,服务端创建一个加密后的JWT信息,作为Token返回。在后续请求中JWT信息作为请求头,发给服务端。服务端拿到JWT之后进行解密,正确解密表示此次请求合法,验证通过;解密失败说明Token无效或者已过期。

    jwt的有点主要有:a.其是去中心化的,便于分布式系统使用; 2. 基本信息可以直接放在token中。 user_id,session_id; 3. 功能权限信息可以直接放在token中。用bit位表示用户所具有的功能权限。 其缺点有:服务端无法主动让token失效,另一个是无法很好的控制payload的数据量。

    3. 小结

    jwt和token+redis两种方案,没有最优,只有结合不同的业务场景,需求最适合的方案。就比如token 2h过期,同一用户每1.5h只生成一次token,当两次token并存时,同时有效。大家可以考虑在这两种方案的前提下,分别如何实现?

    作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。

    上一页12下一页

    好用 哪种 方案

    上一篇:CPO还能走多久(cpo什么)

    下一篇:你见过最能吃的人到底有多能吃,世界上最能吃的人能吃多少

    百科相关内容

    你可能喜欢的