21xrx.com
2024-11-22 05:27:38 Friday
登录
文章检索 我的文章 写文章
Node.js的Passport-JWT模块介绍
2023-07-02 19:33:25 深夜i     --     --
Node js Passport-JWT 模块 鉴权 认证

Node.js是一种轻量级跨平台的开源JavaScript运行环境,是构建高性能、可伸缩Web应用程序的理想选择。Passport是一个Node.js的身份验证中间件,它极大地简化了创建一个安全身份验证系统的过程。而Passport-JWT是Passport的一个插件,用于实现基于JSON Web令牌的身份验证的功能。

JSON Web令牌(JWT)是一种Web标准,它定义了一种紧凑且自包含的方式来表示安全声明,如授权和身份验证。JWT是通过将这些声明进行JSON编码并对其进行签名来实现安全的。这使得传输时不会因篡改或篡改而遭受攻击。

Passport-JWT模块使用起来非常简单,只需要几个步骤。首先,需要安装和引入Passport和Passport-JWT模块。接着,需要定义一个Passport策略,用于验证JWT令牌。这个策略需要指定JWT令牌的密钥和如何提取JWT令牌。在本例中,我们使用从请求标题中提取JWT令牌。


const passport = require('passport')

const JwtStrategy = require('passport-jwt').Strategy

const ExtractJwt = require('passport-jwt').ExtractJwt

const jwtOptions = {

 secretOrKey: 'secretKey',

 jwtFromRequest: ExtractJwt.fromHeader('authorization')

}

const jwtStrategy = new JwtStrategy(jwtOptions, (payload, done) => {

 User.findById(payload.sub, (err, user) => {

  if (err) {

   return done(err, false)

  }

  if (user) {

   return done(null, user)

  } else {

   return done(null, false)

  }

 })

})

passport.use(jwtStrategy)

最后,在需要使用验证的路由上,使用Passport中间件。在本例中,我们使用一个GET路由,仅在用户已成功通过身份验证时才返回数据。


const express = require('express')

const app = express()

app.get('/protected',

 passport.authenticate('jwt', { session: false }), (req, res) => {

 res.status(200).send('You have successfully authenticated')

})

app.listen(3000, () => {

 console.log('Server started on port 3000')

})

总体而言,Passport-JWT是一种非常强大且易于使用的身份验证模块,因此使用它可以加强Node.js应用程序的安全性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复