当前位置: 首页 > 要闻 > 列表

袁庭新老师带你极速掌握如何在SpringBoot项目中使用JWT技术

来源:哔哩哔哩    时间:2023-08-28 09:11:04

学习目标


(相关资料图)

了解JWT基本概念

掌握JWT基本使用

掌握如何在SpringBoot项目中使用JWT

了解跨域解决方案和HandlerInterceptor拦截器

SpringBoot整合JWT教学视频见:【JWT】袁庭新老师SpringBoot+JWT快速上手1小时轻松搞定JWT

1 JWT简介

JWT官方网址:。

什么是JWT

JSON Web Token,简称JWT。通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。JWT是目前最流行的跨域认证解决方案。

JWT有什么用

JWT通常用于Web应用程序中的身份验证和授权目的。一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都要先进行JWT安全校验,通过之后再进行处理。

什么是JWT结构

JWT由Header、Playload、Signature三部分组成,由.拼接。令牌最终的格式像这样:。在传输的时候,会将JWT的三个部分分别进行Base64编码后,拼接成最终传输的字符串,也就是我们的Json Web Token。

Header

Header-标头。JWT头是一个描述JWT元数据的JSON对象。报头通常由两部分组成:令牌的类型和所使用的签名算法。

typ属性:表示令牌的类型,JWT令牌统一写为"JWT"

alg属性:表示使用的签名算法,默认为HMAC SHA256(写为HS256),或者RSA

然后,这个JSON被Base64Url编码,以形成JWT的第一部分。

Payload

playload-载荷。存放用户自定义的信息,通常会把用户信息和令牌到期时间放在这里,同样是一个JSON对象。

然后,有效负载被Base64Url编码,以形成JWT的第二部分。

请注意,对于已签名的令牌,这些信息虽然受到保护,不会被篡改,但任何人都可以读取。除非经过加密,否则不要将机密信息放入JWT的payload或header中。

Payload中有七个默认字段供选择,默认字段并不要求强制使用。我们还可以自定义私有字段,一般会把包含用户信息的非保密数据放到Payload中。

 Signature

Signature-签名。要创建签名部分,您必须获取编码的标头(Header)、编码的有效载荷(Payload)、机密(secret)、标头中指定的算法(如HS256),并对其进行签名。

例如,如果要使用HMAC SHA256算法,则将以以下方式创建签名:

使用标头的算法和私钥对第一部分和第二部分进行加密,通过Base64Url编码后形成JWT的第三部分。

Signature用于验证消息在发送过程中没有更改,在使用私钥签名的令牌的情况下,它还可以验证JWT的发送者是否就是它所说的那个人。

Putting all together

输出是三个由点分隔的Base64-URL字符串,可以在HTML和HTTP环境中轻松传递,同时与基于XML的标准(如SAML)相比更紧凑。

以下显示了一个JWT,该JWT具有以前的标头和有效载荷编码,并使用秘密签名。

如果你想玩JWT并将这些概念付诸实践,你可以使用/#debugger-io来解码、验证和生成JWT。

JWT执行流程

JWT的具体执行流程见下:

JWT优点

基于Token的认证方式相比传统的Session认证方式能够解决移动端和分布式开发中跨域问题,具有下列优点:

减少服务器压力:服务端不需要存储Session信息,Token可以携带登录用户服务器所需信息

支持跨域访问:将Token放到请求头中,就不需要Cookie存储信息,所以跨域后不会因为Cookie是无法跨域而导致信息丢失

更适用于移动端:当客户端是非浏览器平台时或者Cookie被禁止时,采用Token认证方式会简单很多

更适用CDN:可以通过内容分发网络请求服务端的所有资料

无需考虑CSRF:由于不再依赖Cookie,所以采用Token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御

2 JWT使用

JWT基本使用

1.使用IDEA创建一个【Spring Initializr】类型的项目名称为【springboot_jwt】的工程。

2.在项目的配置文件中添加JWT相关依赖。

3.在_包下创建JwtTests测试类,演示JWT的基本使用。

SpringBoot+JWT

1.在_包下创建User实体类。

2.在_包下创建响应统一结果集ResponseResult工具类。

3.在_包下创建JWT操作的工具类。

4.在_包下创建UserController控制层类。

5.使用ApiPost测试工具向http://localhost:8080/users/login接口发送POST类型的请求并提交JSON格式的数据。

6.使用ApiPost测试工具将上一个接口返回的JWT字符串数据,作为本次请求token参数的数据放在Header中提交给服务进行验证。

HandlerInterceptor拦截器

1.创建拦截器类,并实现接口。

2.创建LoginInterceptorConfigurer拦截器的配置类并实现接口,配置类需要添加@Configruation注解修饰。

 跨域解决方案

解决在前后端分离项目中的跨域问题。通过实现WebMvcConfigurer接口,并重写addCorsMappings(CorsRegistry registry)方法来实现。

X 关闭

Copyright © 2015-2023 版权所有  备案号:琼ICP备2022009675号-37

邮箱 : 435 227 67@qq.com