token认证、Express中实现token的过程

news2024/9/24 7:18:17

一、token认证

1. 什么是token

        token的意思是“令牌",是服务端生成的一串字符串,作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

       简单token的组成:uid(用户唯一的身份标识)、time(当前时间的时间翻)、sign (签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

2. 作用

​ (1)防止表单重复提交

       主要的理念是:客户端初始化的时候(一般就是刚刚进入页面的时候)就调用后端代码,后端代码生成一个token,返回给客户端,客户端储存token (可以在前台使用Form表单中使用隐囊域来存储这个Token,也可以使用cookie),然后就将request(请求)中的token与(session)中的token进行比较

​ (2)进行身份验证

       1)身份认证概述
       由于HTTP是一种没有状态的协议,它并不知道是谁访问了我们的应用。这里把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下次这个客户端再发送请求时候,还得再验证一下

       通用的解决方法是:当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁然后把这条记录的id发送给客户端,客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下ookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

       以上所描述的过程就是利用session,那个id值就是sessionid。我们需要在服务端存储为用户生成的session,这些session会存储在内存,磁盘,或者数据库

       2)传统的身份认证方式:

  • cookie:在服务器端生成,保存在客户端
  • session:在服务器端生成,保存在服务器端

       3)token认证:在服务器端不需要保存用户的身份信息,流程如下:

  • 客户端使用用户名和密码请求登录。
  • 服务端收到请求,验证用户名和密码。
  •  验证成功后,服务端会生成一个token,然后把这个token发送给客户端。
  • 客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。
  • 客户端每次向服务端发送请求的时候都需要带上服务端发给的token。
  • 服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

       4)token的本质:是对用户的信息进行加密、解密,因此保存在客户端的token是加密后的一个字符串

 3. 在Node.js中实现token认证:即在前后分离的项目中实现token认证

​ (1)node项目使用JWT模块:JsonWebToken,实现token认证

​       JWT:JsonWebToken,是一种身份认证和授权的方案,即客户端向服务器发送请求时,在请求信息中携带token,服务器端接收到请求信息后,对token进行验证,若验证通过则向客户端响应数据。

​ (2)JWT中的函数:

​ ​       a、sign(payload, secretOrPrivateKey, [options, callback]):sign(加密的数据,加密的密钥,其他参数);返回值一个字符串(即加密后的字符串)

  • ​ payload:需要加密的内容
  • ​ secretOrPrivateKey:加密字符串或密钥文件
  • ​ options:其他参数
  • ​ {  expiresIn:有效时间 // 如 ‘6h’ 、‘1d’  }

​ ​       b、verify(token, secretOrPublicKey, [options, callback]):返回值是逻辑值(true/false),验证token,token字符串一样、密钥也必须一致

  • ​ token:token字符串
  • ​ secretOrPublicKey:加密时用的密钥
  • ​ options:是参数列表

​       ​ c、decode(token [, options]):解密方法,返回的是明文

  • ​ token:token字符串
  • ​ options:是一个逻辑值(true/false)。是否以同步方式解码

(3)token验证的流程

    1)第一次向服务器发起登录请求时,没有token信息

    2)当用户登录后,在服务器端生成token(token中包含哪些信息由用户决定),然后将token响应给客户端

    3)当客户端接收到服务器端响应的token后,将token存入本地的缓存中(如localStorage、cookie)

    4)当客户端再次访问服务器时,需要在请求头中包含token;服务器在接收到客户端的请求后,先查找客户端的请求头中是否有token,若没有,则表明该用户是非法用户,就不响应任何数据;若有token,则表明该用户是合法用户,就响应数据

二、Express中实现token的过程

1. 安装、导入JsonWebToken模块

2. 在登录接口中生成token并响应给客户端

3. 在客户端将接收到的token保存到本地缓存

4. 当客户端再次访问(包括未登录的访问——非法访问)服务器,服务器端会对token进行验证

5. 客户端每次向服务器发起请求时都必须携带token,否则视为非法用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins搭建 笔记总结

文章目录1. 什么是CI/CD(DI)?2. 环境 安装部署3. 搭建 GitLab服务器(ssh方式搭建)4. 搭建 GitLab服务器(Docker方式搭建)4.1 搭建Docker环境4.2 docker容器 安装gitlab5. GitLab 提交代码6. Jenkins 配置Maven Git自动…

【信息论与编码 沈连丰】第五章:离散信道及其信道编码

【信息论与编码 沈连丰】第五章:离散信道及其信道编码第五章 离散信道及其信道编码5.1 信道的分类及其描述5.2 无扰离散信道的传输特性5.3 有扰离散信道的传输特性5.4 译码准则5.5 有扰离散信道的信道编码定理5.6 信道编码定理的应用第五章 离散信道及其信道编码 5…

6\8. 语义分析和中间代码生成

6&8. 语义分析和中间代码生成 从几个问题说起: 要计算 34*5 的值如何计算?按照以前的方法,我们会想到利用符号栈和数值栈来完成这个运算。但是有了语法分析之后我们不再需要进行这么复杂的代码构造了。第一,我们可以使用自顶…

AcWing1206.剪格子——学习笔记(未AC)

题目:1206. 剪格子 - AcWing题库https://www.acwing.com/problem/content/description/1208/ import java.util.Scanner;public class Main {public static void main(String args[]){//读数据Scanner input new Scanner(System.in);String MN input.nextLine();S…

Apache ShardingSphere分表的简单使用和常见问题

目录 简介 什么是 Apache ShardingSphere? 分库分表的背景 使用 pom 配置 1,application.properties配置文件 2,创建配置类 分表 验证分表 常见问题 自定义分表规则未生效 简介 官网:Apache ShardingSphere 版本:4…

ArcGIS基础实验操作100例--实验42创建渔网Fishnet

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验42 创建渔网Fishnet 目录 一、实验背景 二、实验数据 三、实验步骤 (1&a…

深度学习推理框架调研总结

深度学习推理框架1.移动端深度学习推理框架调研1.1 小米的MACE(2017)1.2 阿里的MNN1.3 腾讯的TNN1.4 ARM的tengine1.5 百度的paddle-mobie1.6 Facebook的Caffe2(*)1.7 Google的TensorFlow Lite (*)1.8 Appl…

南京晓庄操作系统期末复习【背诵部分】

操作系统期末复习背诵部分第一章1.操作系统的特征:2.操作系统的最基本特征是什么,为什么3.操作系统的目标4.操作系统的主要功能5.计算机资源6.多道程序设计时应解决什么问题7.三种操作系统及特点第二章1.进程的定义2.进程的特征3.进程的三种基本状态4.进…

Spark04: Transformation与Action开发

一、创建RDD的三种方式 RDD是Spark编程的核心,在进行Spark编程时,首要任务是创建一个初始的RDD这样就相当于设置了Spark应用程序的输入源数据然后在创建了初始的RDD之后,才可以通过Spark 提供的一些高阶函数,对这个RDD进行操作&a…

python学生管理系统(pyqt5 含界面)

学生管理系统项目流程 项目模块 账号登陆 人脸识别 增添学生信息 删除学生信息 改动学生信息 查询学生信息 项目主体框架 app.py为主代码,负责用于界面打开展示。img文件夹负责放置项目qrc的图像page文件夹为单独页面的类plugin文件夹为功能模块的类ui文件夹…

机器人中的数值优化|【一】数值优化基础

数值优化基础 凸集 Convex Sets 凸集的定义 令X是线性空间。如果对于X的子集S中的所有x和y,并且在区间 [0,1]中的所有t,点 (1−t)xty(1-t)x ty(1−t)xty也属于S,则S称为凸集。 不失一般性,对于所有的凸集,其线性组…

Zookeeper详解(二)——API 事件监听

Java API znode是zooKeeper集合的核心组件,zookeeper API提供了一小组方法使用zookeeper集合来操纵znode的所有细节。 客户端应该遵循以下步骤,与zookeeper服务器进行清晰和干净的交互。 连接到zookeeper服务器。zookeeper服务器为客户端分配会话ID。…

uniapp 之 接入小程序客服

目录 前言 小程序客服 代码只需要一步 配置也需要一步​​​​​​​ 前言 小程序客服 因老大 看到别人家有在线客服这个功能&#xff0c;就让我也做一个&#xff0c;这个功能很简单 效果图1 代码只需要一步 <button type"default" open-type"con…

MATLAB | 绘图复刻(六) | 分组环形热图

有粉丝问我Ecology Letters, (2021) 24: 1018–1028 Soil carbon persistence governed by plant input and mineral protection at regional and global scales 这篇文章中的Figure 2咋画&#xff0c;原图长这样&#xff1a; 复刻效果&#xff1a; 完整步骤 0 数据定义 按…

node.js创建网站实例1

1.node.js安装 我的电脑环境&#xff1a;win10 网址&#xff1a;https://nodejs.org/en/ 我下载了18.12.1版本 一路next默认安装&#xff0c;安装完成后&#xff0c;运行cmd&#xff0c;查看版本号 会同时安装npm&#xff0c;也可以同时查看版本号 2.创建第一个网站实例hell…

内卷对于2022是一种无奈,也是一种修行

其实我们谁也不知道2023年对于我们普通的开发人员来说会有什么样的试炼&#xff0c;因为2022年身边有太多的人&#xff0c;为了工作&#xff0c;为了生活&#xff0c;为了家庭&#xff0c;为了理想&#xff0c;不得不选择走向别人看似很卷的那条路。 对于我们周围的人来说&…

【Vim】基本操作及命令集详解

概述 Vim 是从 vi 发展出来的一个文本编辑器。vi 内置在Linux系统中&#xff0c;是vim的简化版编辑器&#xff0c;vim则需要进行安装使用。Vim代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;可以实现高效率移动和高效的输入&#xff0c;在程序员中被广泛使用。…

CPT203-Software Engineering(3)

文章目录9. Software Design9.1 Architecture Design9.1.1 Architectural patterns9.2 Component-level Design9.2.1 Component9.2.2 Views of component9.2.3 Component-level design process9.3 User Interface Design9.3.1 Interface Design Process9.3.2 Interface Design …

蓝桥杯Python练习题16-最大最小公倍数

资源限制   内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   已知一个正整数N&#xff0c;问从1~N中任选出三个数&#xff0c;他们的最小公倍数最大可以为多少。 输入格式   输入一…

三维数学(一)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU?p155 向量 一个数字列表&#xff0c;表示各个维度上的有向位移&#xff1b;同时也是一个有大小有方向的物理量&#xff0c;大小及向量的模长&#xff0c;而方向即空间中向量的指向&#xff0c;可以表示物体…