lukaliou123 / lukaliou123.github.io

lukaliou123在2022年的面试用知识点总结
Other
5 stars 0 forks source link

JWT篇--基础知识 #18

Open lukaliou123 opened 2 years ago

lukaliou123 commented 2 years ago

1.什么是 Json Web Tokens

JWT(JSON Web Token),本质就是一个字符串书写规范,如下图,作用是用来在用户和服务器之间传递安全可靠的信息 image

在目前前后端分离的开发过程中,使用token鉴权机制用于身份验证是最常见的方案,流程如下: 1.服务器当验证用户账号和密码正确的时候,给用户颁发一个令牌,这个令牌作为后续用户访问一些接口的凭证 2.后续访问会根据这个令牌判断用户时候有权限进行访问 Token,分成了三部分,头部(Header)载荷(Payload)签名(Signature),并以.进行拼接。其中头部和载荷都是以JSON格式存放数据,只是进行了编码 image

header 每个JWT都会带有头部信息,这里主要声明使用的算法。声明算法的字段名为alg,同时还有一个typ的字段,默认JWT即可。以下示例中算法为HS256 1649249545(1) 因为JWT是字符串,所以我们还需要对以上内容进行Base64编码,编码后字符串如下: d621602309a24105572f6d29db114cf

payload 载荷即消息体,这里会存放实际的内容,也就是Token的数据声明,例如用户的idname,默认情况下也会携带令牌的签发时间iat,通过还可以设置过期时间,如下: 1649249637(1) 同样进行Base64编码后,字符串如下: 1649249660(1)

Signature 签名是对头部和载荷内容进行签名,一般情况,设置一个secretKey,对前两个的结果进行HMACSHA25算法,公式如下: 1649250013(1)

lukaliou123 commented 2 years ago

2.如何实现

Token的使用分成了两部分: 生成token:登录成功的时候,颁发token 验证token:访问某些资源或者接口时,验证token

3.优缺点

优点: json具有通用性,所以可以跨语言 组成简单,字节占用小,便于传输 服务端无需保存会话信息,很容易进行水平扩展 一处生成,多处使用,可以在分布式系统中,解决单点登录问题 可防护CSRF攻击

缺点: payload部分仅仅是进行简单编码,所以只能用于存储逻辑必需的非敏感信息 需要保护好加密密钥,一旦泄露后果不堪设想 为避免token被劫持,最好使用https协议