在Node.js中使用身份验证和授权:JWT和PASSPORT.JS
#javascript #编程 #node #jwt

身份验证和授权是Web应用程序中安全性的基本资源,可以控制常规对某些系统和系统资源的访问。

在Node.js中,有几种可用的工具可以实现这些功能,例如JWT(JSON Web令牌)和Passport.js。

在本文中,让我们谈谈如何一起使用这些工具,以确保应用程序的安全性和可靠性。

配置环境

在您开始使用JWT和Passport.js之前,我们需要配置我们的开发环境。确保母亲安装了node.js和npm。

然后创建一个新的方向并初始化一个新的node.js项目运行以下命令:

npm init -y

然后使用命令安装以下依赖性:

npm install express jsonwebtoken passport passport-jwt cors

JSON Web令牌(JWT)

JWT是创建访问令牌的开放模式,可用于Web应用程序中的身份验证和授权。

这些令牌是加密的,并包含有关通常的信息,例如名称,电子邮件,权限等。在存储在服务器上的传统会话结束时,JWT令牌存储在客户端的一边,这在可扩展性,性能和安全性方面带来了一些优势。

要生成一个JWT令牌,有必要通过信息信息和秘密键传递给整个JWT.Sign()的秘密键。

示例:

const jwt = require('jsonwebtoken');

const user = {
  id: 1,
  name: 'John Doe',
  email: 'johndoe@example.com',
  permissions: ['admin']
};

const token = jwt.sign(user, 'secret-key');

生成的令牌将是可以发送给客户的加密字符串,通常为cookie或http标头。

要验证JWT令牌,只需使用整个JWT.Verify()传递令牌和秘密键:

const decoded = jwt.verify(token, 'secret-key');

母亲返回一个对象,如果令牌是恶意的,则包含令牌中包含的用户信息。如果包含它,将启动一个例外。

Passport.js

Passport.js是Node.js的身份验证中间件,允许我们使用JWT,OAUTH,BASIC AUTH等不同策略进行身份验证使用。 Passport.js还可以处理授权,检查每个用户的权限。

要在应用程序Node.js中使用Passport.js,有必要安装Passport和Passport-JWT软件包:

npm install passport passport-jwt

接下来,有必要设置身份验证策略,以定义Passport.js将如何检查JWT令牌。

示例:

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

const options = {
  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'secret-key'
};

passport.use(new JwtStrategy(options, (payload, done) => {
  User.findById(payload.sub)
    .then(user => {
      if (user) {
        return done(null, user);
      } else {
        return done(null, false);
      }
    })
    .catch(err => done(err, false));
}));

在此示例中,身份验证用于使用整个Extractjwt.fromaethheaderasbearertoken()提取令牌JWT。

创建身份验证路线

要使用JWT和Passport.js在Node.js中创建身份验证路由,必须按照几个步骤进行操作:

1-配置passport.js用于使用JWT(如上所示):

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

const options = {
  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'your_jwt_secret'
};

passport.use(new JwtStrategy(options, (payload, done) => {
  // Find the user in the database and return it
  // Call done() with an error if the user doesn't exist
  done(null, user);
}));

在此示例中,我们将Passport.js设置为从承载身份验证中提取JWT。

©m我们正在定义基于JWT的身份验证的策略。

2-为身份验证创建路由:

const jwt = require('jsonwebtoken');

router.post('/login', (req, res) => {
  // Authenticate the user
  const user = { id: 1, name: 'John Doe' };

  // Generate a JWT
  const token = jwt.sign(user, 'your_jwt_secret');

  // Return the token to the client
  res.json({ token });
});

在此示例中,我们正在对用户进行身份验证并使用整个JWT.Sign()生成JWT令牌。然后,我们以JSON格式将令牌返回给客户。

3-保护需要身份验证的路线:

const passport = require('passport');

router.get('/protected', passport.authenticate('jwt', { session: false }), (req, res) => {
  res.json({ message: 'This is a protected route' });
});

在此示例中,我们使用中间件Passport.authenticate()来保护路线 /受保护。

此中间件检查JWT令牌是否徒劳,如果是,则将用户对象添加到对象req。

通过这些步骤,您可以使用JWT和Passport.js在Node.js中创建身份验证路由。

- 记住要保护需要身份验证的路线并安全存储秘密键的路线很重要。

参考:

jwt
Passport
https://www.digitalocean.com/community/tutorials/api-authentication-with-json-web-tokensjwt-and-passport