其他分享
首页 > 其他分享> > 原来这就是JWT

原来这就是JWT

作者:互联网

相信兄弟萌也听说过 JWT,但 JWT 这个概念网络上解释得晦涩难懂,我感觉不是特别好理解,这里我尝试着用通俗易懂的话语来解释 JWT!
不多 BB,直接进入正题吧 . . .

1.什么是 JWT?

JWT(JSON Web Token),通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。

哈哈,这样说是不是太官方了,说白了,JWT 就是把信息进行安全的封装,以 JSON 的形式进行传递,我们可以使用 JWT 在用户和服务器之间传递安全可靠的信息。

2.为什么要使用 JWT?

JWT 最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含 JWT,系统在每次处理用户请求之前,都要先进行 JWT 安全校验,通过之后再进行处理。

我们可以使用 JWT 来实现单点登录

可以有同学会想:之前在项目中常常使用的是基于 Redis + Token 的身份认证方案,那使用 JWT 来实现单点登录的好处是什么呢

这里我们简单说一下基于 Redis + Token 的身份认证方案:将各个应用程序与 Redis 相连,对登录成功的用户信息进行一定的算法加密,生成的 ID 被称为 token,将 token 还有用户的信息存入 Redis;等用户再次发起请求的时候,将token 还有请求数据一并发送给服务器,服务端验证 token 是否存在 Redis 中,如果存在,表示验证通过,如果不存在,告诉浏览器跳转到登录页面,流程结束。

上面谈到的基于 Token 身份认证方案需要使用 Redis,那么有没有一种不用 Redis 来实现用户信息的共享,以达到一次登录,处处可见的效果呢

JWT 实现过程简单的说就是用户登录成功之后,将用户的信息进行加密,然后生成一个 token 返回给客户端,与传统的 session 交互没太大区别

唯一的不同点就是:token 存放了用户的有效信息,更直观一点就是将原本放入 Redis 中的用户数据,放入到 Token 中去了

JWT 相比 session 方案,因为 json 的通用性,所以 JWT 是可以进行跨语言支持的,如:JAVA、JavaScript、PHP 等很多语言都可以使用,而 session 方案只针对 JAVA。

因为有了 payload 部分,所以 JWT 可以存储一些其他业务逻辑所必要的非敏感信息。

同时,保护好服务端 secret 私钥非常重要,因为私钥可以对数据进行验证、解密。

3.JWT 认证流程

客户端接收服务器返回的 JWT,将其存储在 Cookie 或 localStorage 中。此后,客户端将在与服务器交互中都会带 JWT。如果将它存储在Cookie 中,就可以自动发送,但是不会跨域,因此一般是将它放入 HTTP 请求的 Header Authorization 字段中。当跨域时,也可以将 JWT被放置于 POST 请求的数据主体中。
在这里插入图片描述

4.JWT 组成?

JWT 由 3 部分组成,用 “.” 拼接,如:
在这里插入图片描述
这 3 部分分别是:

5.加盐加密

在应用中,出于到安全的考虑和数据的保密,需要使用到加密算法,有时候为了让加密的的结果更加扑朔迷离神鬼莫测一些,常常会给被加密的数据加点 “盐”。是不是很形象~

可能有同学会问:我们为什么要使用盐值?MD5 是不可逆算法,如果是为了防止暴力破解,没必要加盐值啊?

这个问题问得很好,其实这个说法也有一定道理,在不可逆的加密算法中,加盐值通常是 “锦上添花”,如果担心使用 MD5 被暴力破解,可以加点盐。

所以说,“加盐加密” 使用的重点是在可逆加密算法中加盐值。

  1. 加密过程(用户注册)
    在这里插入图片描述
  2. 校验过程(用户登录)
    在这里插入图片描述

标签:加密,JWT,Redis,用户,加盐,token,原来,就是
来源: https://blog.csdn.net/qq_37205350/article/details/118861001