账号/密码登录、手机号验证码登录、微信扫码登录
什么是session认证方案
优点
缺点
什么是JWT
JWT(JSON WEB TOKEN) 是目前最流行的跨域认证解决方案,是一种基于Token认证授权机制,JWT自身包含了身份验证所需要的所有信息,因此我们服务端不需要存储Session信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端压力
JWT格式及组成
JWT也是令牌的token,是一个String字符串,由三部分构成,其中用点隔开,连接在一起就是一个JWT Token
JWT的组成
Header:描述JWT的元数据,定义生成签名的算法以及Token类型 Payload:有效负载,用来存放实际需要传递的数据 Signature:前面两部分都使用Base64进行编码,前端可以解开知道里面的数据,Signature需要使用编码后的header和payload加上我们提供的一个密钥使用header中指定的签名算法进行签名,签名的作用是保证JWT没有被篡改过
优点
缺点
方法一
管理后端
服务端(认证鉴权服务)
登录接口:返回accessToken和refreshToken(accessToken与refreshToken时间要错开,一般来说管理后台accessToken一般设置为30分钟,refreshToken设置为1h,小程序或APP:accessToken设置为7天,refreshToken设置为30天)
token续期接口:通过前台传过来的refreshToken来获取新的token(两个)(如果refreshToken过期,直接提示用户重新登录)
前端
方法二
token过期时间由redis来控制
JWT正常情况下只有在过期过后才能失效,所以我们需要第三方的帮助
方案一
每个JWT都有一个唯一的jti字段,我们可以在退出登录/修改密码/重置密码等场景下,将jti字段给保存数据库(MySQL/Redis中),并设置过期的到期时间为Token的到期时间,如果是放在MySQL中则需要设置一个新的字段,如果是Redis中则可以直接设置过期时间,每次判断token的时候都需要查询一下
方案二
因为可以在每个token中加入盐值,认证的时候又会去验证这个盐的值,所以我们可以在每次退出登录/修改密码/重置密码时候,修改这个盐值,所以之前的token就不会验证成功也就失效了