Day01.深入理解Jwt

在这里插入图片描述

Q:一句话概述Jwt?

A:在开发API时,为了防止API被非法调用,会引入参数签名。最简单的参数签名就是把各种参数拼接成字符串,再加一个密钥,最后做一个MD5签名。只要请求来的签名不符就可以认为签名被恶意篡改过。Jwt就是把这件事规范下来了。Jwt的Header部分说明如何进行签名,payload部分就是参数,signature部分就是签名。然后为了URL安全,把整个数据做base64即可。

Q:Jwt的好处?

A:可以使服务器免于存储Session的压力,同时在集群环境下,也免除了Session需要同步的烦恼;

Q:Jwt的认证流程?

img

Q:Jwt与Session Cookie的区别?

A:Jwt验证方式中,Jwt即扮演cookie的角色。客户端在需要身份认证的时候则传回Jwt,区别在于服务器端,此时的服务端不需要通过Session来获取身份信息,而是直接提取Jwt中的信息。也就是说Jwt并不是一个简单的Token,而是可以把信息(Json格式)编码进去的数据。服务器验证签名相符则表示可以使用其携带的数据,否则认证失败。因为信息编码在Jwt中,所以可以免去Session查询的消耗。

而Jwt中的数据需要通过对比签名来确保正确,签名需要的密钥只能存在服务器端。把Jwt的下发和验证逻辑都在服务端处理,这是保证安全的关键。

Q:Jwt的组成部分

A:

  • 头部(header)
{
    "alg" : "AES256", 
    "typ" : "JWT"
}

alg声明使用哪种Hash算法。

  • 荷载(payload)
{
	"sub": "1234567890",
	"name": "John Doe",
	"admin": true
}

payload也就是Jwt中携带的数据。

  • 签名(signature)

签名是Jwt认证的安全核心。因为Base64编码基本等于公开,也很容易被篡改。如何保证可信,那就在签名上面。签名是header、payload和一个密钥产生的哈希值。纵然前面的数据容易被篡改,可是如果不知道签名的密钥则很难保证签名正确。


几个安全要点

  1. 不要假如敏感信息在payload中,因为base64可以无障碍解码
  2. 密钥一定要管理好,只能存在服务器。因为安全的核心在签名,签名的核心在密钥
  3. payload中加入过期时间。因为服务器不存储状态。所以无法判断其有效期。

参考:

JWT(JSON Web Token) 原理简析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值