做登录,微服务架构就要比单体应用多绕圈了,本篇博客会介绍啥是无状态登录以及JWT和RSA是在微服务架构中的作用
无状态登录原理
先提一下啥是有状态登录
单台tomcat的情况下:编码的流程如下
- 前端提交表单里用户的输入的账号密码
- 后台接受,查数据库,
- 在数据库中找到用户的信息后,把用户的信息存放到session里面,返回给用户cookie
- 以后用户的请求都会携带着cookie去访问后台,后台根据用户的cookie辨识用户的身份
但是有缺点
- 如果有千千万的用户都往session里面存放信息,
- session很难跨服务器,也就是说,用户每次请求,都必须访问同一台tomcat,新的tomcat不认识用户的cookie
无状态登录
微服务集群统一对外暴露的是Rest风格的接口,而Rest风格中一个很重要的规范就是:无状态
- 对于服务端,不再保存任何用户的信息,对于他们来说,所有的用户地位平等
- 对于用户,他们需要自己携带着信息去访问服务端,携带的信息可以被所有服务端辨认,所以,对于用户,所有的服务地位平等
具体如何实现呢?
- 用户携带自己的信息访问服务端
- 认证通过,将用户的信息加密成token(存放在cookie里),返回给客户端
- 以后不论用户请求哪个微服务,都携带着token
- 微服务对token进行解密,判断他是否有效
整个登录.授权.鉴权的过程token的安全性至关重要,而JWT就是一门有关于如何生成一个不可仿造的token的规范
JWT(Json Web Token)
他是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权,而且它不是技术,和语言无关,java有对这个规范的实现 叫做 jjwt – 点击进入jjwt的github项目
从图可以看出,头部和载荷被串改后,生成的编码会发生改变,因此保证了token的安全 ,还有,载荷部分可解密,因此不要往里面放入敏感的信息(比如密码 )
只要密钥不泄露,别人就无法伪造任何信息
jwt的交互过程
RSA
先说一下常见的加密方式
- 对称加密,如AES
- 基本原理:将明文分成N个组,然后使用密钥对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。
- 优势:算法公开、计算量小、加密速度快、加密效率高
- 缺陷:双方都使用同样密钥,安全性得不到保证
- 非对称加密,如RSA
- 基本原理:同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端
- 私钥加密,持有私钥或公钥才可以解密
- 公钥加密,持有私钥才可解密
- 优点:安全,难以破解
- 缺点:算法比较耗时
- 不可逆加密,如MD5,SHA
- 基本原理:加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,无法根据密文推算出明文。
jwt(是一种非对称加密算法) JWT不一定非要搭配RSA算法,但是拥有RSA算法公钥私钥的特性,会使我们的业务逻辑变的简单,做到校验变少
- 通过认证,我们使用私钥加密给他令牌token
- 提供公钥就好给对外提供服务的微服务—–省去了他们远程访问,授权中心(JWT)