JWT(JSON Web Token)令牌

一、token 

介绍:令牌,本质是一个字符串(随机生成的位数比较多的字符串,UUID),令牌的作用就是身份识别

1.1什么时候给前端?

登录成功以后,把token给其前端,并且在redis中保存下来设置一个过期时间(免登录)

1.2 前端什么时候用token?

下次请求的时候,我们把token携带到请求头中就可以了

1.3怎么识别token有效?

1.3.1 后端拦截器拦截到前端的每一次请求,并且对比是否携带token(检查时有效)

1.3.1 对一些特别请求,就需要放行

二、JWT

2.1 构成 :有头部、载荷和签名组成。

三、头部(header)

头部用于描述关于该JWT的最基本的信息,例如令牌类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
{"typ":"JWT","alg":"HS256"} 
下面有:{"typ":"JWT","alg":"HS256"}

编码后的结果:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

四、载荷(playload)

载荷就是存放有效信息的地方。这些有效信息包含三个部分
1)标准中注册的声明(建议但不强制使用,默认的属性)
    iss: jwt签发者
    sub: 当前令牌的描述说明
    aud: 接收jwt的一方
    exp: jwt的过期时间,这个过期时间必须要大于签发时间
    nbf: 定义在什么时间之前,该jwt都是不可用的.
    iat: jwt的签发时间
    jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
2)公共的声明 
    公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,
    因为该部分在客户端可解密.
3)私有的声明
    私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该
    部分信息可以归类为明文信息。
    这个指的就是自定义的claim。比如下面面结构举例中的admin和name都属于自定的claim。这些claim跟JWT
    标准规定的claim区别在于:JWT规定的claim,JWT的接收方在拿到JWT之后,都知道怎么对这些标准的claim
    进行验证(还不知道是否能够验证);而private claims不会验证,除非明确告诉接收方要对这些claim进行验
    证以及规则才行。
    定义一个payload: 
        {"sub":"1234567890","name":"John Doe","admin":true}
    base64加密结果是:    
        eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
    载荷中只有标准声明是参与校验的,公共和私有是不参与校验的。

五、签名(signature)

jwt的第三部分是一个签证信息,用来校验数据是否被篡改,这个签证信息由三部分组成:
1)header (base64后的)
2)payload (base64后的)
3)secret(私钥/盐)

签名 ={ base64(header) + base64(payload) + 私钥(盐)} + HS256算法签名 ={ base64(header) + base64(payload) + 私钥(盐)} + HS256算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值