OAuth客户端用于Node.js:通过Google和GitHub实现授权

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

OAuth客户端用于JavaScript (Node.js):完整指南



OAuth(开放授权)是一种开放协议,允许第三方应用程序在无需传递用户登录名和密码的情况下,获得对用户资源的有限访问权限。在Node.js世界中,实现OAuth客户端是现代Web应用程序创建中最常见的任务之一。本文将详细讲解如何使用流行的库Passport.js编写自己的OAuth客户端,用于通过Google和GitHub进行授权。



什么是OAuth 2.0,为什么需要它?

OAuth 2.0是一种用于委托访问的标准。您无需将用户密码存储在自己的服务器上,而是将他们重定向到提供商(Google、GitHub、Facebook)的页面,在那里他们给予同意。之后,您的应用程序会收到一个access token(访问令牌),您可以使用它代表用户访问提供商的API。



主要优点:

  • 安全性 — 密码不会存储在您的服务器上。
  • 用户便利性 — 无需重新注册。
  • 灵活性 — 可以只请求真正需要的数据(scope)。


安装必要的包

为了在Node.js中使用OAuth,我们将使用以下库:

  • express — Web框架
  • passport — 用于身份验证的中间件
  • passport-google-oauth20 — 用于Google的策略
  • passport-github2 — 用于GitHub的策略
  • express-session — 用于存储会话


使用一条命令安装它们:

npm install express passport passport-google-oauth20 passport-github2 express-session


服务器基本配置

创建文件app.js并引入所有必要的模块:

const express = require('express');const passport = require('passport');const session = require('express-session');const app = express();

// 会话配置app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true}));

app.use(passport.initialize());app.use(passport.session());

// 用户序列化占位符passport.serializeUser((user, done) => done(null, user));passport.deserializeUser((obj, done) => done(null, obj));

app.listen(3000, () => console.log('服务器已在端口3000上启动'));


配置Google的OAuth策略

在开始之前,您需要在Google Cloud Console中注册应用程序,并获取Client ID和Client Secret。在设置中指定重定向URI:http://localhost:3000/auth/google/callback。



const GoogleStrategy = require('passport-google-oauth20').Strategy;

passport.use(new GoogleStrategy({ clientID: '您的_GOOGLE_CLIENT_ID', clientSecret: '您的_GOOGLE_CLIENT_SECRET', callbackURL: 'http://localhost:3000/auth/google/callback'}, (accessToken, refreshToken, profile, done) => { // 您可以在此处将配置文件保存到数据库 return done(null, profile);}));

// Google OAuth的路由app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));

app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/' }), (req, res) => res.redirect('/profile'));


配置GitHub的OAuth策略

对于GitHub,请在GitHub Developer Settings中注册OAuth App。Homepage URL: http://localhost:3000,Authorization callback UR

推荐