❤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']
});
目录
相关文章
|
1天前
|
JavaScript IDE 开发工具
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
12 3
|
9天前
|
Dart JavaScript 前端开发
npm install node-sass 安装失败的解决方案:利用国内镜像加速安装
npm install node-sass 安装失败的解决方案:利用国内镜像加速安装
35 1
|
11天前
|
JavaScript Linux
Linux安装nodejs
Linux安装nodejs
17 2
|
12天前
|
JavaScript Ubuntu Linux
蓝易云 - linux中安装nodejs,卸载nodejs,更新nodejs,git
请根据自己的Linux发行版和版本选择合适的命令。
15 2
|
4天前
|
安全 NoSQL Java
JWT和Security 登录权限判断和token访问和让token失效
JWT和Security 登录权限判断和token访问和让token失效
|
5天前
|
JavaScript Windows
下载安装最新版node.js
下载安装最新版node.js
8 0
|
5天前
|
资源调度 前端开发 JavaScript
如何在Node.js环境中安装并使用Bower和LESS
【7月更文挑战第2天】在Node.js环境中,掌握Bower和LESS的使用对前端开发至关重要。安装Bower(全局`npm install -g bower`)用于管理前端资源,通过`bower init`和`bower install`管理依赖。LESS作为CSS预处理器,通过`npm install -g less`安装编译器,用`lessc`命令编译LESS到CSS。虽然Bower已进入维护模式,但理解其用法仍有价值。同时,学习使用Sass或Stylus等预处理器以适应现代前端趋势。
50 0
|
1月前
|
JavaScript 前端开发 中间件
Express框架搭建项目 node.js
【6月更文挑战第3天】这篇文章是关于使用Express框架构建Node.js Web应用的教程。Express是一个轻量级、功能丰富的框架,特点包括简洁灵活的核心、强大的中间件支持、灵活的路由系统和模板引擎兼容性。文章介绍了如何安装Express,并通过一个简单的示例展示了如何创建一个基本的Web服务器。最后,鼓励读者继续学习和实践,以充分利用Express和Node.js的能力。
34 1
|
1月前
|
SQL JavaScript 前端开发
简单用Nodejs + express 编写接口
【6月更文挑战第3天】该文介绍了如何在Node.js和Express中创建GET和POST接口。首先,简要提到了准备工作,建议查阅上一篇文章。接着展示了GET接口的示例,说明可以直接在浏览器中请求。然后,详细解释了POST接口的步骤,包括引入Express模块、设置路由处理程序、解析请求体及处理请求。最后,强调了编写接口时应注意错误处理、安全性、中间件使用、路由组织、日志记录、性能优化和测试等关键点。作者以肥晨的身份结尾,鼓励关注其分享的前端学习资料和技术动态。
22 1
|
10天前
|
JavaScript Linux
Linux安装nodejs指定版本
Linux安装nodejs指定版本
11 0

热门文章

最新文章