JWT与RSA非对称加密的原理及其在微服务中的应用

本文介绍了在微服务架构下如何实现无状态登录,探讨了JWT和RSA非对称加密在其中的作用。通过JWT进行用户认证,使用RSA公钥加密确保安全性,减少服务间鉴权的网络请求,提高系统效率。
摘要由CSDN通过智能技术生成

目前我们创建了若干个微服务,假如我们在用户中心做了登陆,接下来要去商品详情页添加商品,此时就要跳转到购物车微服务,但是购物车微服务和用户微服务不是同一台tomcat,之前判断登录状态是通过tomcat session ,通过保存用户信息到tomcat session 中,那现在我们有两台不同的tomcat,所以现在跳转之后没有登录状态了,这显然是不合理的,因为用户信息无法共享,所以之前所学的登录在分布式系统中是没法使用的,那我们就来解决这个问题——无状态登陆。

1 有状态登录

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session

例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。

缺点是什么?

  • 服务端保存大量数据,增加服务端压力
  • 服务端保存用户状态,无法进行水平扩展
  • 客户端请求依赖服务端,多次请求必须访问同一台服务器

2 无状态登陆

微服务集群中的每个服务,对外提供的都是Rest风格的接口。而Rest风格的一个最重要的规范就是:服务的无状态性,即:

  • 服务端不保存任何客户端请求者信息
  • 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份(并不是用户说自己是谁就是谁,自描述信息会在服务端生成)

带来的好处是什么呢?

  • 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务
  • 服务端的集群和状态对客户端透明
  • 服务端可以任意的迁移和伸缩
  • 减小服务端存储压力

3 如何实现无状态

无状态登录的流程:

<
JWT(JSON Web Token)是一种用于在网络应用间安全传输信息的开放标准。JWT 由三部分组成:头部(header)、载荷(payload)和签名(signature)。 在 JWT ,使用非对称加密算法来实现签名验证。非对称加密算法使用了一对密钥,包括私钥和公钥。私钥用于生成签名,公钥用于验证签名的有效性。 下面是 JWT非对称加密原理: 1. 客户端发送请求时,服务器返回一个 JWT。 2. JWT 由三部分组成,分别是头部、载荷和签名,它们通过点号(.)连接在一起。 3. 头部包含算法类型和令牌类型等信息,例如: ``` { "alg": "RS256", "typ": "JWT" } ``` 4. 载荷包含要传输的数据,例如用户的身份信息,例如: ``` { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } ``` 5. 签名是由头部、载荷和私钥生成的,例如: ``` HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secretKey ) ``` 或者使用非对称加密算法生成签名: ``` RSASHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), privateKey ) ``` 6. 客户端将生成的 JWT 发送给服务器作为身份认证凭证。 7. 服务器接收到 JWT 后,通过公钥来验证签名的有效性,确保 JWT 的完整性和真实性。 8. 如果签名验证通过,服务器使用私钥对 JWT 进行解密,获取其的信息。 通过使用非对称加密算法和私钥签名,JWT 实现了身份验证和信息传输的安全性。在验证签名时,服务器可以根据公钥来验证,而不需要直接访问私钥。这种方式可以确保 JWT 的安全性,并防止篡改和伪造。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值