这篇文章主要介绍了jwt指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联是一家专业提供化德企业网站建设,专注与网站设计、网站制作、H5网站设计、小程序制作等业务。10年已为化德众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
jwt只是缩写,全拼则是JSON Web Tokens,是目前流行的跨域认证解决方案,一种基于JSON的、用于在网络上声明某种主张的令牌token。
JWT 原理
jwt验证方式是将用户信息通过加密生成token,每次请求服务端只需要使用保存的密钥验证token的正确性,不用再保存任何session数据了,进而服务端变得无状态,容易实现拓展。
加密前的用户信息,如:
{ "username": "vist", "role": "admin", "expire": "2018-12-08 20:20:20" }
客户端收到的token:
7cd357af816b907f2cc9acbe9c3b4625
JWT 结构
一个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协议来传输代码
感谢你能够认真阅读完这篇文章,希望小编分享的“jwt指的是什么”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!