JWT登录校验


JWT

JWT (JSON Web Token)也是一种 Token,可以基于 JWT 来做权限认证。

由 Header、Payload 以及 Signature 三部分组成构成。

  • 其中 Header 是描述 JWT 的元数据,包括 token 的类型和生成签名的算法
  • Payload:负载,存的是需要传递的数据;比如登录的时候需要存储用户的登录信息
  • Signature:签名,通过 Header 里指定的签名算法,对 Header 和 Payload 配合密钥生成。主要是防止 Token 被篡改。

基于 JWT 进行身份验证原理(过程)

客户端发起登录请求(提交登录信息,比如用户名和密码),假设验证成功,服务端会根据 Header 和 Payload 以及 Secret 密钥生成一个 token,并发送给客户端,客户端收到后存储在 CookiesLocalStorage 中,以后客户端每次请求都会在 Header 中携带这个令牌用作登录验证。

tips:LocalStorage 是浏览器中永久存在的,只有主动删除时才会被删除,而 sessionStorage 是会话结束后自动删除。

服务端收到请求后,会对令牌进行验证,验证通过才能放行。

如何防止 Token 被篡改

因为服务端收到 Header 和 Payload 后,会再生成一个签名 Signature ,用这个 signature 和 Token 中携带的 signature 进行对比,如果不一致说明被篡改了。

因此密钥要保护好,否则攻击者可以通过该密钥,对 Header 和 Payload 生成一个新的签名,再给服务端就检测不到错误了。

与 Session 相比有什么优缺点

对服务端空间友好,不需要存额外的数据,而 session 需要存在 Redis 或者 Mysql 里。

安全性更高,不需要通过 Cookies 进行验证(Cookies 很容易被作为伪造身份的信息),如上述中有一层认证更安全。

子知识

通用–子知识笔记–JWT 身份认证常见问题及解决办法


文章作者: KTpro
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KTpro !
评论
  目录