技术分享
🗒️express-token
00 分钟
2023-10-12
2023-10-12
type
status
date
slug
summary
tags
category
icon
password

token jwt 介绍

一、Token

  • 什么是 Token? Token 指访问资源的凭据,是一种身份认证的方式,它是解决跨域认证的最流行的一种方式。
  • 为什么用 Token? 以前较为流行的是通过 session 去做身份认证,session 是通过服务器中保存会话数据来做身份认证,这种方式会导致在高并发中服务器压力过大的情况,还有就是,如果是服务器集群,那么就需要这些服务器 session 共享。
Token 不在服务器中保存会话数据,而是保存在客户端。每次请求的 headers 中存入 Token,在服务器中判断 Token 的有效性,是否可以访问资源。
  • 传统 Token 和 JWT 的区别
  • 传统 Token 用户发起登录请求,登录成功之后返回 Token,并且存于数据库,用户访问资源的时候需要携带 Token,服务端获取 Token 之后和数据库中的对比。
  • JWT 用户发起登录请求,登录成功之后返回 Token,但是不存于数据库,用户访问资源的时候需要携带 Token,服务端获取 Token 之后去校验 Token 的合法性。

二、JWT 实现过程

  • JWT 分为三个部分 header、payload、verify signature
  • header
内部包含有签名算法、Token 类型,然后通过 base64url 算法转成字符串
  • payload 内部包含 JWT 标准数据和自定义数据,然后通过 base64url 算法转成字符串 JWT 标准数据常见的有:
可选择性使用以上标准数据
注意:由于 JWT 是默认不加密的,所以在这边不要存敏感信息
  • verify signature 这部分是对前两部分的签名,防止数据的篡改 secret 是服务器端保存的密钥,只有服务器端知道,再使用 header 中所指定的签名算法对上面的俩部分进行签名,按照以下公式生成签名
复制代码 算出签名之后,把三部分通过.分隔开返回给用户就行了
  • 客户端请求
  • 每次客户端的请求都需要带上这个 token,一般是把 token 写入到请求的 headers 中

三、Node.js 中使用

Node.js 中使用 JWT

1.开始使用

通过 npm 包 jsonwebtoken 来完成 token 的生成和验证

2.生成、验证 Token

 

3.使用

总结

:::tip
  • 登录成功之后 服务端根据用户信息生成 token
  • 非登录接口发起请求是需设置 headers.authorization = token
  • 添加token验证中间件,除登录接口 其他接口全部验证 token
  • 验证成功通过,不成功提示错误 :::