在现代应用程序开发中,身份验证和授权是至关重要的。OAuth 是一个开放标准,旨在解决应用程序中的身份验证和授权问题。Passport 是一个流行的 Node.js 身份验证中间件,提供了对多种身份验证策略的支持,包括 OAuth。
本文将介绍如何在 Express.js 应用程序中使用 Passport 实现 OAuth 认证。我们将使用 GitHub OAuth 作为示例。这篇文章将为您提供深入的指导,涵盖以下主题:
- 什么是 OAuth 认证
- 使用 Passport 实现 OAuth 认证的步骤
- 示例代码
什么是 OAuth 认证
OAuth 是一种开放标准,用于身份验证和授权。通常用于授权第三方应用程序访问用户的资源,如 Google Drive、Twitter 或 Facebook。该标准允许用户选择授权给应用程序访问其资源的级别。
OAuth 2.0 是目前最常用的 OAuth 版本,它支持多种身份验证流程,如授权代码、密码、客户端凭据和隐式授权等。在我们的示例中,我们将使用授权代码流程。
在 OAuth 2.0 的授权代码流程中,用户要授权给应用程序访问其资源。授权完成后,应用程序将收到一个授权代码,然后可以使用该代码交换访问令牌。访问令牌用于在有限时间内访问用户资源。
使用 Passport 实现 OAuth 认证的步骤
下面是将使用 Passport 实现 OAuth 认证的步骤:
1. 创建 OAuth 应用程序
首先,您需要在服务提供商的开发人员门户上创建一个 OAuth 应用程序。以 GitHub 为例。在 GitHub 的开发者门户中创建一个 OAuth 应用程序后,我们将获得客户端 ID 和客户端密钥。这些信息用于在我们的 Express 应用程序中完成 OAuth 认证。
2. 安装 Passport
在您可以使用 Passport 进行身份验证之前,您必须下载并安装 Passport 模块。使用以下命令从 npm 安装 Passport:
npm install passport
3. 安装所需的 OAuth 策略
Passport 不仅仅支持 OAuth 认证。还支持多种其他身份验证策略,如本地身份验证、OpenID 和 SAML。在使用 OAuth 认证之前,需要下载并安装所需的 OAuth 策略。
在我们的示例中,我们将使用 passport-github 策略。使用以下命令从 npm 安装该策略:
npm install passport-github
4. 配置 Passport
Passport 是 Express.js 的一个中间件,必须先配置其身份验证策略。在我们的示例中,我们将使用 passport-github 策略。我们必须在我们的应用程序中设置 GitHub 身份验证策略。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - ------------------------------------ ---------------- ---------------- --------- ----------------- ------------- --------------------- ------------ -------------------------------------------- -- --------------------- ------------- -------- ----- - ------------------- --------- ---------- -- -------- ----- ----- - ------ --------- ------ --- - ---
5. 配置路由器
创建 Express.js 应用程序时,您必须添加路由器来处理请求。在我们的示例中,我们将创建一个路由器来处理 GitHub 授权代码的回调。
app.get('/auth/github', passport.authenticate('github', { scope: [ 'user:email' ] })); app.get('/auth/github/callback', passport.authenticate('github', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); });
6. 启用 Passport
启用 Passport 的方法是编写 session
中间件。以下是在我们的 Express.js 应用程序中启用 session
中间件的示例:
const session = require('express-session'); app.use(session({ secret: "YOUR_SECRET_KEY", resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session());
示例代码
以下是示例代码:
-- -------------------- ---- ------- -- ---------- -------- ----- -------- - -------------------- ----- -------------- - ------------------------------------ ---------------- ---------------- --------- ----------------- ------------- --------------------- ------------ -------------------------------------------- -- --------------------- ------------- -------- ----- - ------------------- --------- ---------- -- -------- ----- ----- - ------ --------- ------ --- - --- -- --- -- ------ ----------------------- ------------------------------- - ------ - ------------ - ---- -------------------------------- ------------------------------- - ---------------- -------- --- ------------- ---- - ------------------ --- -- ------ -------- ----- ------- - --------------------------- ----------------- ------- ------------------ ------- ----- ------------------ ---- ---- ------------------------------- ---------------------------- -- ------- ---- ------ --------------------- ------------------------------------------------- ------------- ---- - ---------------- ---------- ---
结论
在本文中,我们已经学习到如何在 Express.js 应用程序中使用 Passport 实现 OAuth 身份验证。我们了解了 OAuth 身份验证的工作原理、安装和配置 Passport 的步骤。我们还展示了一个使用 passport-github 策略基于 GitHub OAuth 认证的示例代码。如果您想了解更多关于 OAuth 身份验证的信息,请访问 OAuth 官方网站 (https://oauth.net/)。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670118350bef792019b171dc