学习目标
(相关资料图)
了解JWT基本概念
掌握JWT基本使用
掌握如何在SpringBoot项目中使用JWT
了解跨域解决方案和HandlerInterceptor拦截器
SpringBoot整合JWT教学视频见:【JWT】袁庭新老师SpringBoot+JWT快速上手1小时轻松搞定JWT
JWT官方网址:。
JSON Web Token,简称JWT。通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。JWT是目前最流行的跨域认证解决方案。
JWT通常用于Web应用程序中的身份验证和授权目的。一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都要先进行JWT安全校验,通过之后再进行处理。
JWT由Header、Playload、Signature三部分组成,由.
拼接。令牌最终的格式像这样:。在传输的时候,会将JWT的三个部分分别进行Base64编码后,拼接成最终传输的字符串,也就是我们的Json Web Token。
Header-标头。JWT头是一个描述JWT元数据的JSON对象。报头通常由两部分组成:令牌的类型和所使用的签名算法。
typ属性:表示令牌的类型,JWT令牌统一写为"JWT"
alg属性:表示使用的签名算法,默认为HMAC SHA256(写为HS256),或者RSA
然后,这个JSON被Base64Url编码,以形成JWT的第一部分。
playload-载荷。存放用户自定义的信息,通常会把用户信息和令牌到期时间放在这里,同样是一个JSON对象。
然后,有效负载被Base64Url编码,以形成JWT的第二部分。
请注意,对于已签名的令牌,这些信息虽然受到保护,不会被篡改,但任何人都可以读取。除非经过加密,否则不要将机密信息放入JWT的payload或header中。
Payload中有七个默认字段供选择,默认字段并不要求强制使用。我们还可以自定义私有字段,一般会把包含用户信息的非保密数据放到Payload中。
Signature-签名。要创建签名部分,您必须获取编码的标头(Header)、编码的有效载荷(Payload)、机密(secret)、标头中指定的算法(如HS256),并对其进行签名。
例如,如果要使用HMAC SHA256算法,则将以以下方式创建签名:
使用标头的算法和私钥对第一部分和第二部分进行加密,通过Base64Url编码后形成JWT的第三部分。
Signature用于验证消息在发送过程中没有更改,在使用私钥签名的令牌的情况下,它还可以验证JWT的发送者是否就是它所说的那个人。
输出是三个由点分隔的Base64-URL字符串,可以在HTML和HTTP环境中轻松传递,同时与基于XML的标准(如SAML)相比更紧凑。
以下显示了一个JWT,该JWT具有以前的标头和有效载荷编码,并使用秘密签名。
如果你想玩JWT并将这些概念付诸实践,你可以使用/#debugger-io来解码、验证和生成JWT。
JWT的具体执行流程见下:
基于Token的认证方式相比传统的Session认证方式能够解决移动端和分布式开发中跨域问题,具有下列优点:
减少服务器压力:服务端不需要存储Session信息,Token可以携带登录用户服务器所需信息
支持跨域访问:将Token放到请求头中,就不需要Cookie存储信息,所以跨域后不会因为Cookie是无法跨域而导致信息丢失
更适用于移动端:当客户端是非浏览器平台时或者Cookie被禁止时,采用Token认证方式会简单很多
更适用CDN:可以通过内容分发网络请求服务端的所有资料
无需考虑CSRF:由于不再依赖Cookie,所以采用Token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御
1.使用IDEA创建一个【Spring Initializr】类型的项目名称为【springboot_jwt】的工程。
2.在项目的配置文件中添加JWT相关依赖。
3.在_包下创建JwtTests测试类,演示JWT的基本使用。
1.在_包下创建User实体类。
2.在_包下创建响应统一结果集ResponseResult工具类。
3.在_包下创建JWT操作的工具类。
4.在_包下创建UserController控制层类。
5.使用ApiPost测试工具向http://localhost:8080/users/login接口发送POST类型的请求并提交JSON格式的数据。
6.使用ApiPost测试工具将上一个接口返回的JWT字符串数据,作为本次请求token参数的数据放在Header中提交给服务进行验证。
1.创建拦截器类,并实现接口。
2.创建LoginInterceptorConfigurer拦截器的配置类并实现接口,配置类需要添加@Configruation注解修饰。
解决在前后端分离项目中的跨域问题。通过实现WebMvcConfigurer接口,并重写addCorsMappings(CorsRegistry registry)方法来实现。
X 关闭
Copyright © 2015-2023 版权所有 备案号:琼ICP备2022009675号-37
邮箱 : 435 227 67@qq.com