nodejs中的express-jwt的使用解读

yizhihongxing

下面就来详细讲解“nodejs中的express-jwt的使用解读”的完整攻略。

什么是express-jwt

express-jwt是一个基于jwt(jsonwebtoken)认证的中间件,用于验证客户端发来的请求是否合法。

安装express-jwt

在终端中运行以下命令来安装express-jwt

npm install express-jwt

使用express-jwt

使用express-jwt中间件可以很容易的进行jwt认证。下面是一个基本的应用程序的示例:

const express = require('express')
const jwt = require('jsonwebtoken')
const expressJwt = require('express-jwt')

const app = express()

app.use(expressJwt({ secret: 'myscrettoken' }).unless({ path: ['/login'] }))

app.get('/login', (req, res) => {
  const user = { id: 1 }
  const token = jwt.sign(user, 'myscrettoken')
  res.send(token)
})

app.get('/protected', (req, res) => {
  res.send(req.user)
})

app.listen(3000, () => console.log('Server started on port 3000'))

上述代码中,我们使用了express-jwt中间件,并将其作为全局的中间件使用,以便对每个发送到服务器的请求都进行认证。我们还指定了myscrettoken作为key用于jwt认证。

我们可以通过调用unless方法来将请求路径添加到保护的列表中。在本例中,我们不需要对/login路径进行jwt认证。

当我们启动应用程序并访问/login路径时,将会得到一个jwt token。将该token复制到HTTP请求的Authorization头中,如下所示:

Authorization: Bearer <your_token_here>

当我们访问/protected路径时,将会验证jwt token是否有效。如果有效,req.user将会包含解码的jwt token。

另一个示例

下面是另一个示例,使用express-jwt来限制API只允许受信任的客户端访问:

const express = require('express')
const jwt = require('jsonwebtoken')
const expressJwt = require('express-jwt')

const app = express()

const clients = [
  {
    id: 'web',
    secret: 'web-secret',
    redirectUri: '/auth/callback'
  },
  {
    id: 'mobile',
    secret: 'mobile-secret',
    redirectUri: '/auth/callback'
  }
]

const trustedClients = {
  'web-secret': 'web',
  'mobile-secret': 'mobile'
}

app.use(express.json())

app.get('/auth/:id', (req, res) => {
  const client = clients.find(client => client.id === req.params.id)

  if (client) {
    res.send(`
      <form method="post" action="/auth/${client.id}/approve">
        <input type="password" name="password" placeholder="Enter password" />
        <button type="submit">Approve</button>
      </form>
    `)
  } else {
    res.status(404).send('Client not found')
  }
})

app.post('/auth/:id/approve', (req, res) => {
  const client = clients.find(client => client.id === req.params.id)

  if (client) {
    if (req.body.password === 'password') {
      const token = jwt.sign({ sub: client.id }, client.secret)
      res.redirect(`${client.redirectUri}?token=${encodeURIComponent(token)}`)
    } else {
      res.status(401).send('Invalid password')
    }
  } else {
    res.status(404).send('Client not found')
  }
})

app.get('/api', expressJwt({
  secret: (req, payload, done) => done(null, trustedClients[payload.clientSecret]),
  algorithms: ['HS256'],
  issuer: 'https://localhost/auth'
}))

app.get('/api/data', (req, res) => {
  res.send('Hello from the trusted client!')
})

app.listen(3000, () => console.log('Server started on port 3000'))

在上面的示例中,express-jwt中间件被用来实施API保护。 客户端需要先通过进行身份验证才能访问受保护的API。

首先,客户端向/auth/:id路径发送身份验证请求,其中:id是客户端的ID。 它将渲染一个表单,用户可以使用密码输入进行身份验证。 如果密码正确,则将生成一个JWT token并将其重定向回客户端。 token包含sub字段,其中包含客户端的ID。 客户端将使用此token在后续请求中进行身份验证。

/api/api/data是受保护的API路径。/api路径使用express-jwt中间件以验证客户端是否已进行身份验证。 当客户端发送JWT token时,express-jwt会使用客户端提供的secret key来验证token的有效性。如果token有效,则客户端将可以访问/api/data路径并得到一条Hello from the trusted client!信息。

这两个示例提供了express-jwt的不同用法,其中第一个用来实施JWT身份验证以保护资源,而第二个用来实施基于客户端身份验证的API保护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs中的express-jwt的使用解读 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js实现微信JS-API封装接口的示例代码

    下面我来详细讲解“node.js实现微信JS-API封装接口的示例代码”的完整攻略。 准备工作 首先,你需要确保自己已经注册了微信公众号,并且已经获取到了公众号的AppID和AppSecret。我们需要用到这些信息来向微信服务器发送请求来获取access_token和JS-SDK所需的ticket。 其次,你需要安装node.js,这里我们选择使用npm来安…

    node js 2023年6月8日
    00
  • Node 切片拼接及地图导出实例详解

    Node 切片拼接及地图导出实例详解 本文将介绍如何使用 Node.js 实现切片拼接和地图导出功能。 准备工作 在开始操作之前,需要先安装以下两个模块: gm:该模块用于处理图像,可以用来进行图像拼接。 mapnik:该模块为 Node.js 提供了一个与 Mapnik 库交互的接口,可以用来生成地图。 可以使用以下命令行进行安装: npm install…

    node js 2023年6月8日
    00
  • Node.js API详解之 console模块用法详解

    Node.js API详解之 console模块用法详解 简介 首先,Node.jsConsole 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台。 Console 模块中提供了许多有用的方法,可以用于打印和调试 Node.js 应用程序。 安装 Node.js console 模块是默认安装的,所以您只需要导入即…

    node js 2023年6月8日
    00
  • TypeScript开发Node.js程序的方法

    TypeScript开发Node.js程序的方法 TypeScript是一种由微软开发的语言,它是JavaScript的一个超集。它允许开发人员使用静态类型和其他高级语言功能来编写更健壮和可维护的JavaScript代码。本文将讲述如何使用TypeScript编写Node.js应用程序。 步骤1:安装TypeScript 在开始使用TypeScript编写N…

    node js 2023年6月8日
    00
  • node.js处理前端提交的GET请求

    要讲解如何用 Node.js 处理前端提交的 GET 请求,需要以下步骤: 创建 Node.js 服务器 接收前端发来的 GET 请求 解析 GET 请求参数 处理请求并返回响应数据 下面我们详细讲解如何用 Node.js 实现以上步骤: 创建 Node.js 服务器 首先需要安装 Node.js,然后打开命令提示符或终端,进入你的项目目录并执行以下命令创建…

    node js 2023年6月8日
    00
  • TypeScript的安装、使用、自动编译的实现

    TypeScript是一种JavaScript的超集语言,它添加了类型注释和一些新特性,可以提高开发效率和代码质量。下面是TypeScript的安装、使用和自动编译的实现攻略。 安装 安装Node.js 首先需要安装Node.js,可以在官网下载安装包进行安装。 安装TypeScript 打开命令行工具,使用以下命令安装TypeScript: npm ins…

    node js 2023年6月8日
    00
  • python 如何在测试中使用 Mock

    Python中的Mock是一个强大的测试工具,用于模拟复杂系统中的组件。它可以模拟在测试中使用的对象的行为和属性,使测试更加可控和可预测。下面介绍如何在Python测试中使用Mock的完整攻略。 步骤一:安装Mock库 通过pip安装Mock库: pip install mock 步骤二:引入Mock库 在测试文件中引入Mock库: from unittes…

    node js 2023年6月8日
    00
  • js+html5实现复制文字按钮

    下面是js+html5实现复制文字按钮的完整攻略。 1. 确定需求和目标 本次任务旨在实现在网页中添加“复制”按钮,用户点击按钮后可以复制指定的文字到剪贴板中。需要使用的技术为HTML5和JavaScript,目标是让用户在使用网站时能够更方便地复制需要的文字。 2. 准备文本内容和按钮元素 首先,在HTML代码中准备好需要复制的文本内容,并在页面中添加一个…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部