OAuth 是一种授权机制,允许用户通过第三方应用程序访问他们的私人资源(如照片、视频等),而无需将用户名和密码提供给第三方应用程序。在本文中,我们将学习如何使用 Express.js 实现 OAuth 授权。
什么是 OAuth?
OAuth 是一种授权协议,允许用户授权第三方应用程序访问他们的私人资源。OAuth 协议使用了一种称为“令牌”的机制,该令牌可以用于代表用户访问资源。这种机制使得用户不必共享他们的用户名和密码,而是可以选择授权第三方应用程序访问他们的资源。
OAuth 授权的工作原理
OAuth 授权的工作原理如下:
用户请求授权:用户向第三方应用程序发出请求,请求访问他们的私人资源。
授权请求:第三方应用程序向用户请求授权,请求访问他们的私人资源。
授权许可:用户授予第三方应用程序访问他们的私人资源的许可。
发放令牌:第三方应用程序向授权服务器请求访问令牌。
令牌响应:授权服务器向第三方应用程序发送访问令牌。
访问资源:第三方应用程序使用访问令牌访问用户的资源。
使用 Express.js 实现 OAuth 授权
以下是使用 Express.js 实现 OAuth 授权的步骤:
- 安装包:我们需要安装以下包:
npm install express passport passport-google-oauth20
配置 Google OAuth2:我们需要在 Google 开发者控制台上创建一个 OAuth2 应用程序,并获取客户端 ID 和客户端秘钥。我们还需要设置回调 URL。
配置 Express.js:我们需要在 Express.js 中配置以下内容:
const express = require('express'); const session = require('express-session'); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20').Strategy; const app = express(); app.use(session({ secret: 'secret', resave: false, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session());
- 配置 Passport.js:我们需要在 Passport.js 中配置以下内容:
passport.use(new GoogleStrategy({ clientID: 'your_client_id', clientSecret: 'your_client_secret', callbackURL: 'http://localhost:3000/auth/google/callback' }, function(accessToken, refreshToken, profile, done) { return done(null, profile); } )); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); });
- 创建路由:我们需要创建以下路由:
app.get('/auth/google', passport.authenticate('google', { scope: ['profile'] })); app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }); app.get('/', function(req, res) { res.send(req.user); });
- 运行应用程序:我们需要运行应用程序,然后访问 http://localhost:3000/auth/google,以进行 OAuth 授权。
示例代码
以下是一个完整的示例代码,演示如何使用 Express.js 实现 OAuth 授权:
const express = require('express'); const session = require('express-session'); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20').Strategy; const app = express(); app.use(session({ secret: 'secret', resave: false, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); passport.use(new GoogleStrategy({ clientID: 'your_client_id', clientSecret: 'your_client_secret', callbackURL: 'http://localhost:3000/auth/google/callback' }, function(accessToken, refreshToken, profile, done) { return done(null, profile); } )); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); app.get('/auth/google', passport.authenticate('google', { scope: ['profile'] })); app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }); app.get('/', function(req, res) { res.send(req.user); }); app.listen(3000, function() { console.log('Listening on port 3000!'); });
总结
本文介绍了如何使用 Express.js 实现 OAuth 授权。我们学习了 OAuth 授权的工作原理,并演示了如何使用 Express.js、Passport.js 和 Google OAuth2 实现 OAuth 授权。希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658e41f6eb4cecbf2d413bc7