ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

原来这就是JWT

2021-07-17 19:32:44  阅读:232  来源: 互联网

标签:加密 JWT Redis 用户 加盐 token 原来 就是


相信兄弟萌也听说过 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 部分分别是:

  • Header
    将这部分信息进行 Base64 编码,编码后就构成了第 1 部分。
    在这里插入图片描述
  • Payload(载荷):存放有效信息
    将这部分信息进行 Base64 编码,编码后就构成了第 2 部分。
    在这里插入图片描述
  • Signature
    将编码后的 Header 和 Payload 用 ‘.’ 拼接,将结果通过 Header 中声明的加密算法加盐加密,就构成了第 3 部分。
    在这里插入图片描述
    这里有个名词 “加盐加密”,也许有兄弟不太清楚是什么意思,这里我们顺便也说一下 “加盐加密” 是什么意思?

5.加盐加密

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

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

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

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

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有