什么是 JWT?
JWT (JSON Web Token) :一种基于 Token 的认证授权机制,可以解决跨域
- 是一个通过
.分成三个 Base64 编码的字符串- Header : 描述 JWT 的元数据,定义了生成签名的算法以及
Token的类型。typ(Type):令牌类型,也就是 JWT。alg(Algorithm):签名算法,比如 HS256。
- Payload : 用来存放实际需要传递的数据:默认不加密,所以不建议存放私密信息(也可以服务端进行加密)
- 前两个都是 json 格式的
- 一般存放用户的身份信息如姓名和过期时间。
- Signature(签名):服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。
- 修改了上面的信息,生成的签名就不会一致了。
- 密钥如果泄露,那么就可以被恶意攻击了。
- Header : 描述 JWT 的元数据,定义了生成签名的算法以及
- 优势:直接包含了所有信息,如过期时间,不需要再在 redis 中存放也是可以的,直接解析出用户信息,去数据库中比对即可。
- 一般放在 localStorage 中,避免出现 CRSF 攻击。
你可以在 jwt.io 这个网站上对其 JWT 进行解码,解码之后得到的就是 Header、Payload、Signature 这三部分。
Header 和 Payload 都是 JSON 格式的数据,Signature 由 Payload、Header 和 Secret(密钥)通过特定的计算公式和加密算法得到。
CRSF
CSRF(Cross Site Request Forgery) :跨站请求伪造,一种网络攻击。
- 伪造身份请求
- 依赖于 Cookie,浏览器只要发送请求,Cookie 就会被携带
SQL 脚本注入
XSS 等安全攻击
