如何在 Express.js 中实现 OAuth 2.0 身份验证

OAuth 2.0 是当前流行的身份验证和授权框架之一,它能让开发者构建安全的 Web 应用程序。在本文中,我们将学习如何在 Express.js 中实现 OAuth 2.0 身份验证。

什么是 OAuth 2.0 ?

OAuth 2.0 是一个开放标准,用于安全地授权和验证用户访问第三方应用程序的资源。OAuth 2.0 通过令牌授权并且通过 OAuth 2.0,第三方应用程序可以请求访问用户受保护的资源,而无需了解其密码或其他凭据。

要使用 OAuth 2.0 身份验证,我们需要进行以下步骤:

  1. 注册应用程序
  2. 访问授权服务器
  3. 接收令牌
  4. 获取用户信息

1. 注册应用程序

在使用 OAuth 2.0 进行身份验证之前,我们需要在服务提供商的开发者门户上注册应用程序。在注册应用程序时,会为我们提供客户端 ID 和客户端秘钥,因此请记下这些值。

2. 访问授权服务器

在授权和验证期间,我们需要向授权服务器发出请求。在 Express.js 中,我们可以使用 Passport.js 中间件来处理身份验证。我们需要安装 passportpassport-oauth2 插件:

npm install passport passport-oauth2 --save

然后,在 app.js 文件中创建一个 Passport 认证策略:

const passport = require('passport');
const OAuth2Strategy = require('passport-oauth2');

require('dotenv').config();

passport.use(new OAuth2Strategy({
        authorizationURL: process.env.OAUTH_AUTHORIZATION_URL,
        tokenURL: process.env.OAUTH_TOKEN_URL,
        clientID: process.env.OAUTH_CLIENT_ID,
        clientSecret: process.env.OAUTH_CLIENT_SECRET,
        callbackURL: process.env.OAUTH_CALLBACK_URL
    },
    (accessToken, refreshToken, profile, cb) => {
        User.findOrCreate({
            username: profile.username
        }, (err, user) => {
            if (err) { return cb(err); }
            cb(null, user);
        });
    }
));

上面的代码使用 OAuth2Strategy 中间件来创建一个 Passport 认证策略。在一切就绪之后,它将使用回调 URL 来进行身份验证。

3. 接收令牌

为了接收 OAuth 2.0 令牌,我们需要在 Express.js 服务器上设置一个回调 URL。这可以通过如下代码完成:

app.get('/auth/example/callback',
    passport.authenticate('oauth2', {
        failureRedirect: '/login'
    }),
    (req, res) => {
        // Successful authentication, redirect home.
        res.redirect('/');
    });

我们可以在应用程序的路由中将这个 URL 与 OAuth 认证关联起来。当用户完成身份验证并返回服务器时,Passport 将在这个 URL 上运行,并将令牌和其他相关数据传递给我们的服务器。

4. 获取用户信息

如果您想要访问授权服务器中存储的用户详细信息,您将需要使用 Passport.js 的用户信息中间件。在上面提到的身份验证回调中,我们可以使用以下代码获取用户信息:

app.get('/auth/example/callback',
    passport.authenticate('oauth2', {
        failureRedirect: '/login'
    }),
    (req, res) => {
        // Successful authentication, redirect home.
        res.redirect('/');
    });

上面的代码将在用户进行身份验证后,从授权服务器获取用户的详细信息。

总结

在本文中,我们学习了如何使用 OAuth 2.0 在 Express.js 应用程序中实现身份验证过程。通过注册应用程序,并使用中间件和策略,我们可以轻松地创建一个安全的 Web 应用程序,其中包含 OAuth 2.0 身份验证过程。

参考资料

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6593bc73eb4cecbf2d860a56


纠错反馈