基于JWT的Token认证

1、什么是JWT

JSON Web Tokens,是一种开发的行业标准规范RFC 7519。广泛的用在系统的认证和数据交换方面。

2、JWT结构

JWT 由三个部分依次组成

  • Header(头部)
  • Payload(载荷)
  • Signature(签名)

2.1、Header

Header 部分是一个 JSON 对象,描述 JWT 的元数据,包含算法和token类型。
需要对json进行base64url加密

{
 "alg": "HS256",
 "typ": "JWT"
}

2.2、Payload

用来存放实际需要传递的数据。
需要json进行base64url加密

里面的前五个字段都是由JWT的标准所定义的,并且也支持自定义字段

iss: 该JWT的签发者 
sub: 该JWT所面向的用户 
aud: 接收该JWT的一方 
exp(expires): 什么时候过期,这里是一个Unix时间戳 
iat(issued at): 在什么时候签发的

#自定义字段
name:hello

2.3、Signature

把前两段的base密文通过·拼接起来,使用HS256加密

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

例如

eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2MTQ2Puk_fv6cyfk0B1j7vbIqw_Q

3、JWT认证流程

  • 客户端发送(用户名、密码)身份信息至服务器端;
  • 服务器端对客户端发送身份信息进行校验,校验通过后,生成token字符串;
  • 服务器端将生成的token字符串发送给客户端(服务器端不保存token);
  • 客户端接收到token后,将token保存到cookie或者localstorage;
  • 客户端每次向服务器端发送请求,携带token(通过header、cookie等方式);
  • 服务器端收到请求,首先验证token是否合法过期(可通过拦截器方式),返回对应信息;

4、JWT认证和传统session认证区别

4.1、基于session的认证

http协议是一种无状态的协议,本身是无法对访问的客户端进行识别。
采用session机制,客户端在服务端登陆成功之后,服务端会生成一个sessionID,返回给客户端,客户端将sessionID保存到cookie中,再次发起请求的时候,携带cookie中的sessionID到服务端,服务端会缓存该session(会话),当客户端请求到来的时候,服务端就知道是哪个用户的请求,并将处理的结果返回给客户端。

存在问题:

  • session保存在服务端,当客户访问量增加时,服务端就需要存储大量的session会话,对内存压力增大
  • 分布式集群环境存在session共享问题
  • CSRF攻击: 基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

4.2、基于token的鉴权机制

基于token的鉴权机制类似于http协议也是无状态的,服务端不需要保存认证信息或者会话信息

5、JWT特点

跨域访问:基于Token的访问策略可以

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值