Java安全框架(一):Spring Security基础
Java安全框架(二):Spring Security工作原理
Java安全框架(四):Spring Security + JWT综合应用(流程梳理)
一、概述
1、什么是无状态?
简单讲,服务里面一定要存一个session那就是有状态,不需要存就是无状态
2、服务架构演进
- 单体架构(有状态)
缺陷:Session在服务器中,如果服务器有多个,由于服务器轮询,会造成频繁跳转登录;服务器开销大

- 分布式架构:Redis集中管理session(有状态)
缺陷:服务端要一直维持session状态,redis挂掉了,所有用户要重新登录;服务器开销大

- 微服务架构:JWT(无状态)
优势:登陆后返回jwt,以后每次用户会携带jwt发送请求,服务端不需要再维持session状态

二、JWT基础知识
1、什么是JWT
通过json的形式作为web应用中的令牌,用于各方之间安全的信息传输。(json web token)
- 优势

2、JWT结构
(1)结构
标头(Header).有效载荷(Payload).签名(Signature)
- Header
{
“alg”: “HS256”, // 签名算法
“typ”: “JWT” // 令牌类型
}
// 对上面做Base64编码
base64UrlEncode(header)
- Payload(有效负荷中不要放敏感信息,因为Base64编码是可以解码的)
{
“sub”: “1234567890”,
“name”: “tom”,
“admin”: true
}
// 对上面做Base64编码
base64UrlEncode(payload)
- Signature(防止Header和Payload被篡改)
HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), “secret”);
(2)解密

(3)验证
将传入的token的第1、2部分加上secret进行加密,如果跟第3部分相同,则验证通过。
HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), “secret”);
3、JWT认证流程

三、JWT简单使用
1、引入依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
2、生成token
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DATE, 6);
// 生成令牌
String token = JWT.create()
.withClaim("username", "张三") // 自定义用户名
.withExpiresAt(instance.getTime()) // 设置过期时间
.sign(Algorithm.HMAC256("securityJWT")); // 设置签名
// 输出令牌
System.out.println(token);
- 生成的token
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTgzNDM5NDAsInVzZXJuYW1lIjoi5byg5LiJIn0.2mfqA8AMn9rK-OpKDYEbOO8hWb5DSdVOmL0a_mxq5CE
3、根据令牌和签名解析数据
// 创建验证对象
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("securityJWT")).build();
DecodedJWT decodedJWT = jwtVerifier.verify(“eyJ0eXAiOiJKV1Q...jkfSgrqD7BtZg7GeA");
System.out.println("用户名:" + decodedJWT.getClaim("username").asString());
System.out.println("过期时间:" + decodedJWT.getExpiresAt());
四、单点登录
1、什么是单点登录?
我们在某宝中,可以看到,里面有很多别的应用,而我们想要用,直接点就行了,并不需要再次登录,这就是单点登录。

2、单点登陆的原理
多个应用间是通过token进行传输,当你登录某宝之后,会产生一个token,在你后续访问过程中都会携带这个token,而当你点击其他应用时,也会把token传过去,应用会对token进行解密验证,验证成功,即可访问。

最后修改时间:2020-08-27 15:04:58
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




