【IT老齐024】前后端分离架构下JWT认证方案该怎么设计?

559 阅读1分钟

配合视频效果更佳: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校验无感知,验签过程无侵入,执行效率低,适用于低并发企业级应用

方案二:控制更加灵活,有一定代码侵入,代码可以灵活控制,适用于追求性能互联网应用