JWT中的Token

1.JWT是什么?

jwt(json web token的缩写)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以json对象安全地传输信息,此信息可以验证和信任,因为它是数字签名的,jwt可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对,进行签名。

通俗解释:JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输,在数据传输过程中还可以完成数据加密、签名等相关处理。

2.JWT能做什么?

2.1 授权

使用JWT的最常见方案,一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由、服务和资源,单点登录是当今广泛使用JWT的一项功能,因为他的开销很小并且可以在不同的域中轻松使用。

2.2 信息交换

JSON Web Token是在各方之间安全地传输信息的好方法,因为可以对JWT进行签名(例如:使用公钥/私钥对),所以您可以确保发件人是他们所说的人,此外,由于签名是使用标头和有效负载计算的,因此你还可以验证内容是否遭到篡改。
作用:传输数据和安全验证,其主要会用在安全验证

3. 基于JWT认证

3.1 认证流程

在这里插入图片描述

  1. 首先,前端通过Web表单将自己的用户名和密码发送到后端的接口,这一过程一般是一个HTTP POST请求,建议的方式是通过SSL传输(https协议),从而避免敏感信息被嗅探;
  2. 后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Based64编码拼接后签名,形成一个JWT(token),形成的JWT就是一个形同lll.zzz.xxx的字符串(token、head.payload、singurater三部分组成,中间用点.连接);
  3. 后端将JWT字符串作为登录成功的返回结果返回给前端,前端可以将返回的结果保存在localStorage或sessionStorage上,退出登录时前端删除保存的JWT即可;
  4. 前端在每次请求时将JST放入HTTP Header中的Authorization位(解决XSS和XSRF问题-防伪跨拦截攻击);
  5. 后端检查是否存在,如存在验证JWT的有效性,例如:检查签名是否正确,检查Token是否过期,检查Token的接收方是否是自己(可选);
  6. 验证通过后,后端使用JWT中包含的用户信息进行其他逻辑操作,返回相应的结果;

3.2 JWT优势

  1. 简洁(compact):可以通过URL,POST参数或在HTTP header发送,因为数据量小,传输速度也很快;
  2. 自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库;
  3. 因为token是以json加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持;
  4. 不需要在服务端保存会话信息,特别适用于分布式微服务;

4.JWT组成

4.1 令牌组成

令牌就是token,类型为String,x(标头header).y(payload负载).z(签名signature)三段组成

  1. 标头(Header);
  2. 有效载荷(payload)
  3. 签名(signature)

4.2 Header

//标头通常是由两部分组成,令牌的类型(即JWT)和使用的签名算法,例如HMAC、SHA256或RSA,它会使用Base64编码组成JWT 结构的第一部分;
//注意:Base64是一种编码,也就是说,它是可以被翻译回原来的样子,它并不是一种加密过程;

//jwt将下面的头信息数据进行Base64编码(类似于加密),后期是可以进行解码;


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值