token的使用流程以及 JWT构成和构建

2023-10-26

1.什么是token

token是一个令牌,是前后端开发时的一个验证工具,(就是一个字符串)

我们先解释一下他的含义:

1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

了解了Token的意义后,我们就更明确的知道为什么要用他了

 

2.token的使用流程

 

1.前端向后端传递用户名和密码

2.后端将接收到的的用户名和密码进行核实

3.后端核实成功后会,返回给前端一个token(或者直接将token保存在cookie中);

4.前端得到token 并对其进行保存

5.如果前端请求隐私的接口(比如需要登陆后才能查看商品的详细信息),则需要传递保存的token(进行ajax请求时,将信息放在请求头中)

6.后端对其进行验证,如果token错误,则请求不到数据,返回给前端相应的提示
           如果token验证正确,则 获取相应的数据,并返回给前端

 

3.JWT的构成

 JWT是由三部分构成,将这三段信息文本用链接构成了JWT字符串,    header + payload +secret = 加密的字符串
1.header 头部

2.payload 负载-------写相关的信息
  {
    user:"签发者",
    exp:"token过期时间"//必须大于签发时间
  }

3.secret 密钥------用来进行jwt的签发和jwt的验证,它就是你服务端的私钥,在任何场景都不应该流露出去实际的 JWT 大概就像下面这样

 

它是一个很长的字符串,中间用点(.)分隔成三个部分。注意,JWT 内部是没有换行的,这里只是为了便于展示,将它写成了几行。

JWT 的三个部分依次如下。

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

写成一行,就是下面的样子。


Header.Payload.Signature

1 Header

Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。


{
  "alg": "HS256",
  "typ": "JWT"
}

上面代码中,alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT

最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。

2 Payload

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。

  • iss (issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号

除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。


{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

注意,JWT 默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。

这个 JSON 对象也要使用 Base64URL 算法转成字符串。

4.后端JWT的构建

// 1.下载包
        npm install jsonwebtoken --save-dev

    // 2.引入
        var JWT = require("jsonwebtoken");
    //负载信息
    let payload = {
        user:"sun",
        // exp:"1000 * 60"//单位 ms
    }
    //密钥
     let secret = "123456";
     //生成token,exporesIn为过期时间,单位:ms/h/days/d  eg:1000, "2 days", "10h", "7d"
    let token= JWT.sign(payload,secret,{expiresIn:"1h"})
    //将token保存在cookie中
    res.cookie("token",token);

5.前端请求保密性的信息(比如:必须登录后,才能查看商品的详细信息),发送JWT

//获取cookie,
    var token = $.cookie("token");
    //发起ajax请求,将token发送到后端
    $.ajax({
        type: "get",
        url: "/goods",
        //将信息保存在请求头中
        headers: {
            auth: token
        }

    })

6.后端验证JWT

//获取前端传来的tokenlet token = req.headers.auth;
  JWT.verify(token, "密钥", (err, decoded) => {
    if (err) {
            //验证失败
            //console.log("令牌失效");
            res.json({
                status:false,
                info:"令牌失效"
            })
        } else {
            //验证成功
            //获取前端需要的相应数据
        //返回给前端相应的信息
         res.json({
                status:true,
                info:请求的数据
            })
        }
    })

总结

token简单的使用流程。(nodejs)

Token的作用主要有两个,一是防止表单重复提交,二是验证身份。

Token使用的流程:

1 首先安装第三方依赖cnpm install jsonwebtoken --save-dev

2 在controller层引入第三方依赖:const JWT = require(“jsonwebtoken”)

3 定义头部:let header = {一般第一JWT的信息和签名使用的方法}

4 定义负载:let payload = {有固定的格式}

5 定义秘钥:let secret = “”;

6 将三部分用base64编码后将三部分拼接起来。

Let token = JWT.sign(payload,secret,{expiresIn : “10h”});

7 将token存入cookie中:res.cookie(“token”,token)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

token的使用流程以及 JWT构成和构建 的相关文章

随机推荐

  • Unity开发(一)——各种坑集合

    1 unity的vs项目无法打开 2 不安全代码只会在使用 unsafe 编译的情况下出现 3 unity各菜单含义
  • Oracle查看总数据量大小

    Oracle查看总数据量大小 select round sum bytes 1024 1024 1024 total data size from dba segments where segment name not like BIN
  • SqlServer的bit类型

    SqlServer的bit类型比较特殊 在SQL Server 中 图形化界面时 显示的是true false 输入也是true false 用T SQL语句select查询出来的结果是1 0 使用T SQL语句时可以用1 0 也可以用tr
  • 王峰十问Nervos联合创始人王宁宁:缘何“中国最懂以太坊的人”要走中国公链的自主创新之路?...

    本文旨在传递更多市场信息 不构成任何投资建议 文 王峰十问 出品 火星财经APP ID hxcj24h 11月7日晚8点 王峰十问第36期 惊蛰 中国公链如何实现自主创新 在火星财经社群展开 这也是 王峰十问中国公链 系列正式启动的第1期
  • 博易大师行情服务器文件夹,博易大师目录

    c program files pobo settings这个目录下的东西是pobo的参数设置这个路径是可以改的具体在pobo安装路径下有个cfg子目录里面有个userpath ini文件内容就是pobo settings的生成路径第一次运
  • TCP 多线程——一个服务器被多个客户端连接

    为了使一个服务器端能被多个客户端连接我们采用线程的方法 服务器创建一个线程之后 打开的套接字就被线程所继承 线程可以和连接的客户进行通信 而主线程 主服务器 可以继续接受以后的客户连接 即Accept之后产生一个c 然后将c传递给新创建线程
  • Visual C++ 2008 Feature Pack 开发包

    http download csdn net detail fandh 1018063 Visual C 2008 Feature Pack 开发包
  • 使用 Skeleton Screen 提升用户感知体验

    1024程序猿节 愿世界和平 没有bug 腾讯云社区向改变世界的程序猿致敬 作者 陈纬杰 一直以来 无论是web还是iOS android的应用中 为了提升应用的加载等待这段时间的用户感知体验 各种奇门遁甲之术层出不穷 其中 菊花图以及由它
  • 【满分】【华为OD机试真题2023 JAVA&JS】硬件产品销售方案

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 硬件产品销售方案 知识点递归数组DFS搜索回溯 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 某公司目前推出了AI开发者套件 AI加速卡 AI加速模块 AI服务
  • 可以改动的option组件_MySQL的validate_password插件/组件总结

    Password Validation插件和组件 在MySQL 8 0之前 MySQL使用的是validate password插件 plugin 检测 验证账号密码强度 保障账号的安全性 而到了MySQL 8 0 引入了服务器组件 Com
  • c高级 day4

    实现一个对数组求和的函数 数组通过实参传递给函数 bin bash read p 请输入数组 a arr function sum sum 0 for i in arr do sum sum i done echo 数组和 sum sum
  • ubuntu nginx服务器安装SSL证书

    证书安装 前往 SSL 证书管理控制台中下载 SSL 证书 名称以 bdjw work 为例 文件压缩包 并解压到本地目录 解压缩后 可获得相关类型的证书文件 文件内容 bdjw work bundle crt 证书 bdjw work k
  • MySQL 高级原理: MySQL执行过程及执行顺序

    一 MySQL执行过程 MySQL整体的执行过程如下图所示 1 1 连接器 1 1 1连接器的主要职责 1 负责与客户端的通信 是半双工模式 这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据 而不能同时进行 其中My
  • 文件的打开与关闭

    对于文件的打开与关闭 我们可以通过鼠标来控制 但是 在我们写代码的时候 总不能来用鼠标来打开关闭文件 并且还能将代码放在那个文件里面吧 因此 我们需要一个文件指针来帮助我们来打开和关闭文件 1 文件指针 缓冲文件系统中 关键的概念是 文件类
  • Ubuntu命令行修改网络配置,静态ip,hostname ,解决hostname ping不通的办法

    打开后里面可设置DHCP或手动设置静态ip 前面auto eth0 让网卡开机自动挂载 1 以DHCP方式配置网卡 编辑文件 etc network interfaces sudo vi etc network interfaces 并用下
  • Ms08067漏洞复现

    Ms08067漏洞复现 首先安装好测试环境xp的镜像文件 nmap扫描 首先确定靶机所在的网段 然后在kali中利用命令扫描出IP nmap sP 192 168 229 0 24 得到 IP 192 168 229 168 其次在利用nm
  • 字节、字、位、比特的概念和关系

    1 位 bit 来自英文bit 音译为 比特 表示二进制位 位是计算机内部数据储存的最小单位 11010100是一个8位二进制数 一个二进制位只可以表示0和1两种状态 21 两个二进制位可以表示00 01 10 11四种 22 状态 三位二
  • 如何避免服务器被恶意网络攻击

    服务器的IP是可公开透明的 很容易遭到黑客入侵或网络攻击 对服务器的恶意网络行为包括两个方面 首先是恶意的攻击行为 如DDoS攻击 网络病毒等等 这些行为旨在消耗服务器资源 影响服务器的正常运作 甚至服务器所在网络的瘫痪 另外一个就是恶意的
  • STM8L151的IAR工程编译报错Fatal Error[Pe035]: #error directive: “Please select first the target STM8L...

    项目场景 STM8L151G4XX单片机IAR工程编译报错 问题描述 编译报错 Fatal Error Pe035 error directive Please select first the target STM8L device us
  • token的使用流程以及 JWT构成和构建

    1 什么是token token是一个令牌 是前后端开发时的一个验证工具 就是一个字符串 我们先解释一下他的含义 1 Token的引入 Token是在客户端频繁向服务端请求数据 服务端频繁的去数据库查询用户名和密码并进行对比 判断用户名和密