首页 > 编程语言 >Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证

Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证

时间:2024-05-24 23:30:22浏览次数:26  
标签:Node 用户 JWT JSON 认证 Token 字符串 身份 客户端

JWT的认识

什么是 JWT

        JWT(英文全称:JSON Web Token)是目前最流行的跨域认证解决方案。

JWT 的工作原理

        总结:用户的信息通过 Token 字符串的形式,保存在客户端浏览器中。服务器通过还原 Token 字符串的形式来认证用户的身份。 

 JWT 的组成部分

        JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效荷载)、Signature(签名)。 三者之间使用英文的“.”分隔,格式如下:

下面是 JWT 字符串的示例:

 JWT 的三个部分各自代表的含义

        JWT 的三个组成部分,从前到后分别是

  • Header
  • Payload
  • Signature

        其中:  Payload 部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串。

         Header 和 Signature 是安全性相关的部分,只是为了保证 Token 的安全性。

JWT 的使用方式

        客户端收到服务器返回的 JWT 之后,通常会将它储存在 localStorage 或 sessionStorage 中。

         此后,客户端每次与服务器通信,都要带上这个 JWT 的字符串,从而进行身份认证。推荐的做法是把 JWT 放在 HTTP 请求头的 Authorization 字段中,格式如下: 

在 Express 中使用 JWT

1.安装 JWT 相关的包

        运行如下命令,安装如下两个 JWT 相关的包:

 其中:

  • jsonwebtoken 用于生成 JWT 字符串
  • express-jwt 用于将 JWT 字符串解析还原成 JSON 对象

2. 导入 JWT 相关的包

使用 require() 函数,分别导入 JWT 相关的两个包:

3. 定义 secret 密钥

        为了保证 JWT 字符串的安全性,防止 JWT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密和解密的 secret 密钥:

  • 当生成 JWT 字符串的时候,需要使用 secret 密钥对用户的信息进行加密,最终得到加密好的 JWT 字符串
  • 当把 JWT 字符串解析还原成 JSON 对象的时候,需要使用 secret 密钥进行解密 

4. 在登录成功后生成 JWT 字符串

调用 jsonwebtoken 包提供的 sign() 方法,将用户的信息加密成 JWT 字符串,响应给客户端:

 5. 将 JWT 字符串还原为 JSON 对象

        客户端每次在访问那些有权限接口的时候,都需要主动通过请求头中的 Authorization 字段,将 Token 字符串发送到服务器进行身份认证。 此时,服务器可以通过 express-jwt 这个中间件,自动将客户端发送过来的 Token 解析还原成 JSON 对象:

6. 使用 req.user 获取用户信息

        当 express-jwt 这个中间件配置成功之后,即可在那些有权限的接口中,使用 req.user 对象,来访问从 JWT 字符串中解析出来的用户信息了,示例代码如下:

 

标签:Node,用户,JWT,JSON,认证,Token,字符串,身份,客户端
From: https://blog.csdn.net/qq_38965505/article/details/139181076

相关文章

  • nvm介绍、下载、安装、配置及使用,(Node Version Manager)nodejs版本管理切换工具
    1、介绍nvm在Web前端项目开发过程中,由于各种前端框架、插件以及Nodejs、Npm的飞速更新,在项目新开发或对老项目进行更新维护时,有些项目版本的配置和当前Node、Npm环境不匹配,导致运行报错,甚至都无法启动。nvm的出现就是为了解决以上问题的,nvm是一个Node.js版本管理器,......
  • CCF-CSP认证 2024年3月 4.化学方程式配平
    题解:首先完成数据的读入,然后高斯消元求秩按题意解即可#pragmaGCCoptimize(2,3,"Ofast","inline")#include<bits/stdc++.h>usingnamespacestd;constintmaxn=100;usingmatrix=double[maxn][maxn];usingvect=array<double,maxn>;constdoub......
  • K8S认证|CKA题库+答案| 16. 升级集群
    16、升级集群CKAv1.29.0模拟系统免费下载试用:百度网盘:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwd=wbki 题目:您必须在以下Cluster/Node上完成此考题:   Cluster                    Masternode   ......
  • nodejs安装及环境配置
    Node.js的安装及环境配置可以遵循以下步骤:一、Node.js的安装访问Node.js的官方网站(https://nodejs.org/en/),下载对应你操作系统的Node.js安装包。找到下载的安装包目录,双击进行安装。在安装过程中,接受用户协议,选择安装的位置(最好是英文路径,不要有空格)。选择安装项,一般选择......
  • yarn dev 或者 npm run dev 或node -v 等报错:'node' 不是内部或外部命令,也不是可运行
    1,重新配置环境变量:控制面板——系统和安全——系统——高级系统设置——环境变量——系统变量——找到path,双击修改或新增node安装路径,一般是:“C:\ProgramFiles\nodejs”,一路“确定”保存设置2,检查path路径是否正确电脑任务栏搜索cmd,打开cmd编辑器检查nodejs路径:3......
  • nodeJS文件操作
    const{log}=require("console");constfs=require("fs");constpath=require("path");constfilename=path.resolve(__dirname,"./myfiles1.txt");//console.log(filename)//fs.readFile(filename,(err,content)......
  • 【DRF-04】rest-framework之认证
    1.认证基本使用1.1:问题:有些API(订单信息)需要用户登录成功之后,才能访问;有些无需登录就能访问。1.2:解决思路:用户登录后,生成token--保存在数据库中,前端带token,允许访问,不带token,不允许访问。1.3:modelsfromdjango.dbimportmodelsclassUserInfo(models.Model):......
  • nodeJS 内置对象
    //const{log}=require("console");//const{argv}=require("process");//log(__dirname)//setImmediate(()=>{//log(__filename)//})//constbuffer=Buffer.from('a1','utf-8')//log(buffer)/......
  • NodeJS-高性能编程-全-
    NodeJS高性能编程(全)原文:zh.annas-archive.org/md5/DF276329F6BD35B176ABE023A386AF47译者:飞龙协议:CCBY-NC-SA4.0前言在像Node.js这样的平台上实现高性能意味着要了解如何充分利用硬件的各个方面,并帮助内存管理发挥最佳作用,并正确决定如何设计复杂的应用程序。如果您的......
  • Node-Red-实战编程-全-
    Node-Red实战编程(全)原文:zh.annas-archive.org/md5/C5AA5862C03AC3F75583D0632C740313译者:飞龙协议:CCBY-NC-SA4.0前言Node-RED是由Node.js制作的基于流的编程工具。这个工具主要用于连接物联网设备和软件应用程序。然而,它不仅可以涵盖物联网,还可以涵盖标准的Web应用......