rsa前后端加密流程_技术分享|JWT加密原理浅析

f71ea52cf7d4dd6f66eda99167999fe7.png

熊   玉

合肥科技研发中心

由于Http协议本身是无状态的,那么服务器是怎么识别两次请求是不是来自同一个客户端呢,传统用户识别是基于seeion和cookie实现的。大致流程如下:

83ae9dfc538b91f265e86cd920da9f07.png

      上述常用的做法,客户端在服务端登陆成功之后,服务端会生成一个sessionID,返回给客户端,客户端将sessionID保存到cookie中,再次发起请求的时候,携带cookie中的sessionID到服务端,服务端会缓存该session(会话),当客户端请求到来的时候,服务端就知道是哪个用户的请求,并将处理的结果返回给客户端,完成通信。

通过上面的分析,可以知道传统的做法存在以下缺点:

  1. 对于分布式架构的支持以及扩展性不是很好。

  2. session是保存在内存中,单台服务器部署如果登陆用户过多占用服务器资源也多。

  3. 集群必须得实现session共享的话,集群数量又不易太多,否则服务器之间频繁同步session也会非常耗性能。

从而引出:用户标识数据存在浏览器,浏览器每次请求都携带该数据,服务器做校验,这也是JWT的思想。

01

e83567dba8953094f8f3f18d11851637.png

     JWT概念和组成结构

什么是JWT:Json Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,简称JWT,在HTTP通信过程中,进行身份认证。JWT是目前比较流行的跨域认证解决方案,是一种基于JSON的开发标准,由于数据是可以经过签名加密的,比较安全可靠,一般用于前端和服务器之间传递信息,也可以用在移动端和后台传递认证信息。

组成结构:JWT就是一段字符串,格式如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxIn0.qfd0GelhE1aGr15LrnYlIZ_3UToaOM5HeMcXrmDG由三部分组成,之间用"."接。

8f59aabd9ce8bf7a0e397a52daa4372f.png

头信息、载荷、签名如下:

5e58d1c87a95506e0ce3ca86a9101891.png 7f7daef8655af194d3fa34a3899e5e47.png

02

e83567dba8953094f8f3f18d11851637.png

JWT验证流程

下图演示一次post请求的验证过程, 用户端登录成功后,服务器会生成一个token给到用户端,token里面包含用户信息(用户id),发送POST携带该token进行请求访问,服务器从用户的请求中成功解析token信息,则说明用户的请求合法有效,反之服务器从token解析不出用户信息就认为请求非法失效。

5a0ca142706550527ebe5ae4abde0251.png b7e595f525c3e02e607af517d73692ee.png

03

e83567dba8953094f8f3f18d11851637.png

案例演示

1、生成加密公钥私钥,RS256加密算法公钥私钥生产:openssl命令生成(git的客户端gitbash上面运行或安装jdk的机器上面cmd运行命令)。

第一步:生成私钥,这里我们指定私钥的长度为2048,openssl genrsa -out rsa_private_key.pem 2048 ;

第二步:根据私钥生成对应的公钥:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key_2048.pub ;

第三步:私钥转化成pkcs8格式:openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > rsa_private_key_pkcs8.pem 。

2、源码展示

加密函数:

0b02c2ee6802d5e61b2bd2ad78863b73.png

解密函数:

962c28bf2f5b59eaeea3e38905b06287.png

运行结果如下图:加密前后信息一致,解析正确可识别当前访问用户。

fdf20e248fab41d458785b4edef0b314.png 0e3cff8150bbee54afa214c7a9f216ea.png 0e3cff8150bbee54afa214c7a9f216ea.png e83567dba8953094f8f3f18d11851637.png

以上给大家简单分享的JWT加密算法的基本概念和优点,从编程实现的角度做了具体demo代码实现,工作中会面对不同的业务应用场景,应当结合实际使用。

aa856ae531883bf466f2f47a74119d71.gif 534e592d37c6b22f8ec2d19f18fdd4c7.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值