jwt是什么

发布时间:2024-11-27 点击:39
jwt只是缩写,全拼则是json web tokens,是目前流行的跨域认证解决方案,一种基于json的、用于在网络上声明某种主张的令牌token。
jwt 原理
jwt验证方式是将用户信息通过加密生成token,每次请求服务端只需要使用保存的密钥验证token的正确性,不用再保存任何session数据了,进而服务端变得无状态,容易实现拓展。
加密前的用户信息,如:
{ "username": "vist", "role": "admin", "expire": "2018-12-08 20:20:20"}客户端收到的token:
7cd357af816b907f2cc9acbe9c3b4625jwt 结构
一个token分为3部分:
头部(header)
载荷(payload)
签名(signature)
3个部分用“.”分隔,如:
eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9.eyjzdwiioiixmjm0nty3odkwiiwibmftzsi6ikpvag4grg9liiwiawf0ijoxnte2mjm5mdiyfq.sflkxwrjsmekkf2qt4fwpmejf36pok6yjv_adqssw5c头部
jwt的头部分是一个json对象,描述元数据,通常是:
{ "typ": "jwt", "alg": "hs256"}typ 为声明类型,指定 "jwt"
alg 为加密的算法,默认是 "hs256"
也可以是下列中的算法:
载荷
载荷(payload)是数据的载体,用来存放实际需要传递的数据信息,也是一个json对象。
jwt官方推荐字段:
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
也可以使用自定义字段,如:
{ "username": "vist", "role": "admin"}签名
签名部分是对前两部分(头部,载荷)的签名,防止数据篡改。
按下列步骤生成:
1、先指定密钥(secret)
2、把头部(header)和载荷(payload)信息分别base64转换
3、使用头部(header)指定的算法加密
最终,签名(signature) = hmacsha256(base64urlencode(header) "." base64urlencode(payload),secret)
客户端得到的签名:
header.payload.signature
也可以对jwt进行再加密。
jwt 使用
1、服务端根据用户登录状态,将用户信息加密到token中,返给客户端
2、客户端收到服务端返回的token,存储在cookie中
3、客户端和服务端每次通信都带上token,可以放在http请求头信息中,如:authorization字段里面
4、服务端解密token,验证内容,完成相应逻辑
jwt 特点
jwt更加简洁,更适合在html和http环境中传递
jwt适合一次性验证,如:激活邮件
jwt适合无状态认证
jwt适合服务端cdn分发内容
相对于数据库session查询更加省时
jwt默认不加密
使用期间不可取消令牌或更改令牌的权限
jwt建议使用https协议来传输代码

备案电话接听问题-备案平台
云计算仍将迎来下一个黄金十年,企业如何跟上其发展?
阿里云服务器装宝塔面板价格
【新手答疑】拥有了一个网站就相当于拥有了八个优势!
状态正在解析的地址状态正在连接状态连接建立
epic双重认证如何操作 Epic双重认证的图文教程
网站上传至阿里云服务器上
云服务器ecs快照一直扣费