📜  了解登录屏幕背后的 Web 身份验证(1)

📅  最后修改于: 2023-12-03 15:21:39.504000             🧑  作者: Mango

了解登录屏幕背后的 Web 身份验证

Web 身份验证是 Web 应用程序的必要组成部分,它确保只有被授权的用户才能访问受到保护的资源。在本文中,我们将了解 Web 身份验证的基础知识和如何在 Web 应用程序中实现身份验证。

什么是身份验证?

身份验证是确认用户身份的过程。在 Web 应用程序中,身份验证通常发生在用户登录时。用户输入用户名和密码后,Web 应用程序使用验证机制验证他们提供的凭据是否正确。一旦确认用户的身份,他们就可以访问受保护的资源,例如需要登录才能访问的页面或数据。

常见的身份验证方法
基于表单的身份验证

基于表单的身份验证是 Web 应用程序中最常见的身份验证方法。在这种方法中,用户在 Web 应用程序的登录页面输入他们的凭据(通常是用户名和密码),这些凭据被提交到服务器进行验证。如果验证通过,则用户被授权访问受保护的资源。

登录表单示例:

<form action="/login" method="POST">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="submit" value="Login">
</form>
基于令牌的身份验证

基于令牌的身份验证是另一种常见的身份验证方法。在这种方法中,用户在登录后接收到一个令牌,该令牌用于以后的身份验证。令牌通常是长字符串,可保存在 Cookie 中或使用浏览器的 LocalStorage 存储。

身份验证令牌示例:

// 生成令牌
const token = jwt.sign({ username: 'alice' }, 'secret');

// 存储令牌
localStorage.setItem('token', token);

// 获取令牌
const token = localStorage.getItem('token');

// 解密令牌
const decoded = jwt.verify(token, 'secret');
基于证书的身份验证

基于证书的身份验证是一种较少使用的身份验证方法,它使用公共密钥证书和私有密钥证书来验证用户身份。在这种方法中,用户需要安装浏览器插件或操作系统证书仓库中的证书。

身份验证的实现

Web 应用程序可以使用许多框架和库来实现身份验证。在这里,我们将介绍两个常用的身份验证库:Passport 和 jwt。

Passport

Passport 是一个流行的 Node.js 身份验证库,它支持多种身份验证策略,包括基于表单的身份验证和基于令牌的身份验证。

安装 Passport

使用 NPM 安装 Passport:

npm install passport

配置 Passport

在应用程序中配置 Passport:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

app.use(passport.initialize());

使用 Passport

使用 Passport 登录:

app.post('/login',
  passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
  function(req, res) {
    res.redirect('/');
  });
jwt

JSON Web Token(JWT)是一种基于令牌的身份验证方法,它使用 JSON 对象作为令牌。JWT 令牌通常包含一些元数据和用户 ID。

安装 jwt

使用 NPM 安装 jwt:

npm install jsonwebtoken

生成和验证 jwt 令牌

在服务器端生成 jwt 令牌:

const jwt = require('jsonwebtoken');

const token = jwt.sign({ id: user.id }, 'secret', { expiresIn: '1h' });
res.cookie('token', token);
res.redirect('/');

使用 jwt 验证令牌:

const jwt = require('jsonwebtoken');

router.get('/', function(req, res, next) {
  const token = req.cookies.token;
  jwt.verify(token, 'secret', function(err, decoded) {
    if (err) {
      res.redirect('/login');
      return;
    }

    const user = User.findOne({ id: decoded.id });
    res.render('index', { user });
  });
});
总结

身份验证是 Web 应用程序的必要组成部分。在本文中,我们了解了身份验证的基本概念和常见的身份验证方法。我们还介绍了两个常见的身份验证库(Passport 和 jwt)和如何在应用程序中使用它们来实现身份验证。