配合视频效果更佳:www.itlaoqi.com/chapter.htm…
本文内容
1.什么是JWT?
2.JWT的认证架构设计?
前文讲过的前后端分离架构
什么是JWT
Json Web Token(JWT):JWT是一个经过加密的,包含用户信息的且具有时效性的固定格式字符串
JWT包含三部分:
eyJhbGciOiJIUzI1NiJ9
.eyJzdWIiOiJ7XCJ1c2VySWRcIjoyLFwidXNlcm5hbWVcIjpcImxpc2lcIixcIm5hbWVcIjpcIuadjuWbm1wiLFwiZ3JhZGVcIjpcInZpcFwifSJ9
.NT8QBdoK4S-PbnhS0msJAqL0FG2aruvlsBSyG226HiU
第一部分:Header
eyJhbGciOiJIUzI1NiJ9
-----------------------------------------
{
"alg": "HS256",
"typ": "JWT"
}
第二部分:载荷Payload
eyJzdWIiOiJ7XCJ1c.....
-----------------------------------------
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
第三部分:签名Sign
NT8QBdoK4S-....
---------------------------------------------------------------------
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT的创建与校验
Java提供了JJWT其他语言也提供了对应的组件
生成JWT代码
校验JWT代码
基于JWT的认证架构
方案一:网关统一校验
认证中心生成的JWT信息
通过认证中心返回的权限数据
方案二:应用认证方案
基于自定义注解的JWT验签
@GetMapping("/xxx")
//自定义注解,利用AOP做验签
@CheckJwt
public void xxx(){
//Controller代码
}
应用场景
方案一:JWT校验无感知,验签过程无侵入,执行效率低,适用于低并发企业级应用
方案二:控制更加灵活,有一定代码侵入,代码可以灵活控制,适用于追求性能互联网应用