❤Nodejs 第九章(token身份认证和express-jwt的安装认识)

简介: 【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。

❤Nodejs 第九章(token身份认证和express-jwt的安装认识)

源码地址(https://gitee.com/lintaibai/NexusVue)喜欢的给个star吧

1、token基本概念

Session认证的局限性

Session 认证机制需要配合Cookie才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。

注意:

  • 当前端请求后端接口不存在跨域问题的时候,推荐使用 Session 身份认证机制。
  • 当前端需要跨域请求后端接口的时候,不推荐使用 Session 身份认证机制,推荐使用 JWT 认证机制。

什么是token

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

jwt的原理

image.png

总结

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

jwt的组成

JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效荷载)、Signature(签名)

三者之间使用英文的“.”分隔,格式如下:

js
复制代码
Header.Payload.Signature

// 列如
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Im5hbWUiOiJ6cyIsInBhc3N3b3JkIjoxMjN9LCJpYXQiOjE2Mzc1MDcyNzksImV4cCI6MTYzNzUxODA3OX0.0o9PCv-11SxM8TgMns--S0D-ZnidYZdXLk13V_B35B0

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

JWT 的三个组成部分,从前到后分别是 Header、Payload、Signature。

其中:

  • payload 部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串。
  • HeaderSignature 是安全性相关的部分,只是为了保证 Token 的安全性。

image.png

jwt的使用方式

  • 前端
  1. 客户端收到服务器返回的 JWT 之后,通常会将它储存在localStoragesessionStorage 中。

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

    bash
    复制代码
    Authorization: Bearer [token]
    
  • 后端

    1. 登录成功, 生成token, 返回给浏览器
    2. 所有的接口中. 判断请求头是否携带了token(登录页面除外)

2、使用jwt

express-jwt 介绍和认识 (后面抽离为单个模块)

官网
https://www.tabnine.com/code/javascript/functions/express-jwt/expressJwt

1、简述

JWT ,全称JSON Web Token,本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。

express-jwt是express的中间件,用来解析请求对象的JWT负载。

2、简单用法

使用HS256加密的JWT:

var {
    expressjwt: jwt } = require("express-jwt");

app.get(
  "/protected",
  jwt({
    secret: "helloworld", algorithms: ["HS256"] }),
  function (req, res) {
   
    if (!req.auth.admin) return res.sendStatus(401);
    res.sendStatus(200);
  }
);

3、express-jwt参数详解

expressjwt的参数列表如下:

secret:必须的参数,为字符串string类型 或者 GetVerificationKey函数接口

GetVerificationKey = (req: express.Request, token: jwt.Jwt | undefined) => Promise;

getToken?:可选的参数,TokenGetter接收快速请求并返回令牌的函数,默认情况下它在Authorization头中查找。

isRevoked?:可选的参数,一个验证令牌是否被撤销的函数,函数接口如下:

IsRevoked = (req: express.Request, token: jwt.Jwt | undefined) => Promise;
credentialsRequired?:可选的参数,类型为bool,当为false时,如果请求不包含令牌,则继续到下一个中间件,而不是失败,默认为true。
requestProperty?:可选的参数,类型为string,请求对象中设置有效负载的属性的名称。

4、安全漏洞

当提供第三方库作为机密时,需要使用算法参数来防止潜在的降级攻击。
不要混合使用对称算法和非对称算法(如HS256/RS256):在没有进一步验证的情况下混合使用算法可能会潜在地导致降级漏洞。

jwt({
   
  secret: "shhhhhhared-secret",
  algorithms: ["HS256"],
  //algorithms: ['RS256']
});
目录
相关文章
|
19天前
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
|
1月前
|
移动开发 JavaScript 前端开发
为了学习vue3,安装nvm进行node的多版本管理
为了学习vue3,安装nvm进行node的多版本管理
66 2
|
1月前
|
资源调度 jenkins 持续交付
jenkins 自动安装nodejs16.16.0版本报错处理
jenkins 自动安装nodejs16.16.0版本报错处理
76 0
|
18天前
|
JavaScript 前端开发 中间件
Express框架搭建项目 node.js
【6月更文挑战第3天】这篇文章是关于使用Express框架构建Node.js Web应用的教程。Express是一个轻量级、功能丰富的框架,特点包括简洁灵活的核心、强大的中间件支持、灵活的路由系统和模板引擎兼容性。文章介绍了如何安装Express,并通过一个简单的示例展示了如何创建一个基本的Web服务器。最后,鼓励读者继续学习和实践,以充分利用Express和Node.js的能力。
23 1
|
18天前
|
SQL JavaScript 前端开发
简单用Nodejs + express 编写接口
【6月更文挑战第3天】该文介绍了如何在Node.js和Express中创建GET和POST接口。首先,简要提到了准备工作,建议查阅上一篇文章。接着展示了GET接口的示例,说明可以直接在浏览器中请求。然后,详细解释了POST接口的步骤,包括引入Express模块、设置路由处理程序、解析请求体及处理请求。最后,强调了编写接口时应注意错误处理、安全性、中间件使用、路由组织、日志记录、性能优化和测试等关键点。作者以肥晨的身份结尾,鼓励关注其分享的前端学习资料和技术动态。
19 1
|
18天前
|
JavaScript NoSQL 数据库连接
使用Nodejs + express连接数据库mongoose
【6月更文挑战第3天】这篇文章介绍了如何在Express应用中使用Mongoose连接MongoDB数据库。首先,需要创建一个`db.js`文件,然后通过`npm install mongoose`安装Mongoose驱动。接着,在应用中引入MongoDB模块,建立到数据库的连接。创建一个Mongoose schema定义数据模型,如用户信息表。最后,执行数据库操作,包括查询、插入、更新和删除文档,并在完成后关闭数据库连接。文中还提供了相关代码示例。
12 1
|
25天前
|
Web App开发 缓存 JavaScript
Node.js安装及环境配置,详细简单易懂!一文get全部!
Node.js安装及环境配置,详细简单易懂!一文get全部!
|
6天前
|
存储 资源调度 JavaScript
使用 Homebrew 安装 Node.js
使用 Homebrew 安装 Node.js
34 0
|
7天前
|
JSON JavaScript 中间件
Node.js Express 框架
Node.js Express 框架
12 0
|
25天前
|
Web App开发 JavaScript Cloud Native
构建高效可扩展的RESTful API:Node.js与Express框架实践指南构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第29天】 在数字化时代的驱动下,后端服务架构的稳定性与效率成为企业竞争力的关键。本文深入探讨了如何利用Node.js结合Express框架构建一个高效且可扩展的RESTful API。我们将从设计理念、核心模块、中间件应用以及性能优化等方面进行系统性阐述。通过实例引导读者理解RESTful接口设计的最佳实践,并展示如何应对大规模并发请求的挑战,确保系统的高可用性与安全性。