赞
踩
全称:Java Web Token
是一种标准,一般用来在登录用户和身份信息验证之间进行信息认证。这个token可以用于认证。JWT是基于Json的一个公开规范,它允许我们在用户和服务器之间传递安全可靠的信息
JWT的具体使用方式是,服务端根据规范生成一个令牌(token),并发放给客户端。此时,客户端在请求服务端时可以携带这个令牌,以证明自己的身份信息。因此,可以说JWT是Token的一种具体实现形式,它遵循特定的标准和格式。
用户认证通过之后服务端会创建对应的session并存储,会生成一个唯一的session_id并返回给客户端,客户端在浏览器的Cookie中或其他方式(内存,但服务器重启后会丢失;数据库持久化)进行存储。下次再访问的时候携带者session_id,服务端根据session_id就可以验证是谁发送的请求,进行身份验证等等
Session存储了什么?
缺点:Session保存在服务器中,如果是是分布式应用的话Session无法共享(因为每次请求不一定会在哪台机器上),不便于维护
alg 属性表示签名使用的算法,默认为 HMAC SHA256(写为HS256),typ 属性表示令牌的类型,JWT 令牌统一写为JWT
组成:传递的信息+默认字段信息
iss (issuer):签发人/发行人
sub (subject):主题
aud (audience):用户
exp (expiration time):过期时间
nbf (Not Before):生效时间,在此之前是无效的
iat (Issued At):签发时间
jti (JWT ID):用于标识该 JWT
注意:JSON 对象也使用 Base64 URL 算法转换为字符串后保存,是可以反向反编码回原样的
需要指定一个 secret,该 secret 仅仅保存在服务器中,保证不能让其他用户知道。这个部分需要 base64URL 加密后的 header 和 base64URL 加密后的 payload 使用 . 连接组成的字符串,然后通过header 中声明的加密算法 进行加secret组合加密,然后就得出一个签名哈希,也就是Signature,且无法反向解密。
注意:JWT对三个部分都使用的是Base64进行编码,但是Base64是可逆的,所以注意在Payload部分不要携带敏感信息。
比方说我们有上图这样一个token,我们就可以通过JWT官网提供的工具进行解密。解密之后会自动拆分成对应的三部分
但是要注意,签名部分的文本框中要填写你在项目中配置的secret,否则会出现下面这种验证失败的问题:
用户登录身份验证
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。