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

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

1问题描述

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

问题结论

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

2Token机制简述

21Token的用途

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

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

22token+redis机制

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

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

23jwt机制

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

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

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

3小结

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

跟你遇到一样的问题,解决了!都是菜鸟,不容易,分享一下:

你在这个配置里面填写的Token (weixin)要跟你weixintong-entphp页面中定义的Token一致才可以;

所以你现在要做的就是打开 weixintong-entphp 找到里面定义Token的地方,写成( weixin )即可;

URL和token不是凭空出现的,url是服务器域名,token是第三方后台自行设置的,如果不懂开发,就需要找专门的开发公司解决;

目前微信开店有两种选择,一种是使用微信公众号微商城,这需要基于微信公众号进行二次开发,是基于微信公众平台打造的原生电商模式,包括添加商品、商品管理、订单管理、货架管理、维权等功能,开发者可使用接口批量添加商品,快速开店。 另一种就是当下最前沿的微信小程序商城了,无论选择哪种,使用必须满足一下条件:

1必须有营业执照;

2必须开通微信支付接口;

3必须缴纳账号审核费用300元。其中,服务号、小程序和微信支付都需要营业执照认证,个体工商户和公司都可以。

有了以上条件,就可以找第三方技术公司搭建微信小程序商城了。不同的第三方其产品和服务存在较大差异,微信小程序商城主要通过第三方平台技术实现。基于微信小程序的公开接口,在客户关系管理、市场推广、运营活动、O2O落地执行等方面可以为商家提供更丰富的营销解决方案。

微信公众平台上,Token是密码,URL是你部署微信公众号服务器的地址。

开发就是将高级功能接口文件部署在服务器上,使能被访问。接口文件在微信公众号帮助文档里面找。token是你在接口文件里自己设置的,设置后回到高级功能里来设置成一样的,目的是告诉公众平台,那个服务器是我的,这个过程就是验证密码。

所以,token是自己设置的,URL是自己拥有的服务器的接口地址。80端口,是你的服务器开放给微信调用的端口,一般来说,都是这样的,不用去管它。排查或者调试问题时,会用到。

怎么填写?

需要在第三方的微信公众平台里才能找到。

如果没有跟第三方公司合作那是没有的,如果有合作,自然对方就会告诉你token在哪里,绑定平台后输入你的ID会自动生成一个url和token

拓展:

微信公众平台,简称公众号。曾命名为“官号平台”、“ 媒体平台”、微信公众号,最终 定位为“公众平台”,无疑让我们看到一个微信对后续更大的期望。

和新浪微博早期从明星战略着手不同, 微信此时已经有亿级的 用户,挖掘自己用户的价值,为这个新的平台增加更优质的内容,创造更好的粘性,形成一个不一样的生态循环,是平台发展初期更重要的方向。

利用公众账号平台进行自媒体活动, 简单来说就是进行一对多的媒体性行为活动,如商家通过申请公众微信服务号通过二次开发展示商家 微官网、微会员、微推送、 微支付、微活动、微报名、 微分享、 微名片等,已经形成了一种主流的线上线下微信 互动营销方式。

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
两种使用方式:
用设备号/设备mac地址作为Token(推荐)
客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。
服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。
分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理看若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。
用session值作为Token
客户端:客户端只需携带用户名和密码登陆即可。
客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。
分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13505832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-20
下一篇 2023-08-21

发表评论

登录后才能评论

评论列表(0条)

保存