JWT(JSON Web Token)
2022-02-14 22:42:54 23 举报
AI智能生成
JWT的一些基础知识
作者其他创作
大纲/内容
是什么
是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。<br>该信息可以被验证和信任,因为它是数字签名的。<br>其本质上就是由服务器生成的用于鉴权的字符串。<br>
目的
替代Cookie与Session<br>前后端分离后的鉴权<br>分布式服务中的鉴权<br>
优点
简洁:其数据量小,传输速度也很快
跨语言:因为JWT Token是以JSON加密形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持
不依赖于cookie和session
适合移动端应用
单点登录友好
缺点
JWT最大的问题就是<b>Token的撤销问题</b>。从创建Token到Token过期,服务器都没有简单的方法可以失效它。
构成
JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。<br>在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串<br>
标头(Header)
JWT头是一个描述JWT元数据的JSON对象。<br>alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);<br>typ属性表示令牌的类型,JWT令牌统一写为JWT。<br>
{<br> "alg": "HS256",<br> "typ": "JWT"<br>}
有效载荷(Payload)
JWT的主体内容部分,存放有效信息的地方,包含三个部分
Registered claims 注册的声明
一组官方预定义的声明,建议但是非强制
iss(issuer): 签发者<br>sub(subject): 主题<br>aud(audience): 接收jwt的一方<br>exp(expiration time): 过期时间<br>nbf(Not Before): 生效时间<br>iat(Issued At): 签发时间<br>jti(JWT ID): jwt的唯一身份标识,主要用来作为一次性token
Public claims 公共的声明
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息。<br>但不建议添加敏感信息,因为该部分在客户端可解密(base64算法)。<br>
Private claims 私有的声明
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息
<b>注意:</b>都不建议添加敏感信息,因为信息只是使用base64算法进行转换,而base64算法是对称解密的,意味着该部分信息可以归类为明文信息。
{<br> "sub": "1234567890",<br> "name": "John Doe",<br> "iat": 1516239022<br>}
签名(Signature)
是对上面两部分数据签名,由于使用了不可逆的加密算法,无法解码出原文,它的作用是校验token有没有被篡改。<br>
生成办法:<br>首先,使用base64编码后的header和payload数据。<br>然后,需要指定一个<b>密钥(secret)</b>。该密码仅仅为保存在服务器中,并且不能向用户公开。<br>最后,使用header中指定的<b>签名算法</b>(默认情况下为HMAC SHA256)根据公式生成签名。<br>签名公式:<br>HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)<br>
到目前为止,jwt的签名算法有三种:<br>HMAC【哈希消息验证码(对称)】:HS256/HS384/HS512<br>RSASSA【RSA签名算法(非对称)】:RS256/RS384/RS512<br>ECDSA【椭圆曲线数据签名算法(非对称)】:ES256/ES384/ES512<br>
流程图
0 条评论
下一页
为你推荐
查看更多