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