使用Google身份验证保护REST API是一种确保API安全性的方法,通过验证用户的身份来控制对API资源的访问。以下是使用Google身份验证保护REST API的步骤:
1. 创建Google Cloud项目
- 访问Google Cloud Console。
- 创建一个新项目或选择一个现有项目。
2. 启用Google Identity Platform
- 在Google Cloud Console中,导航到“API和服务” > “库”。
- 搜索并启用“Identity Platform”API。
3. 配置OAuth同意屏幕
- 导航到“API和服务” > “OAuth同意屏幕”。
- 填写必要的信息,如应用名称、用户支持电子邮件等。
- 添加所需的OAuth范围(例如,
openid
, email
, profile
)。
4. 创建OAuth 2.0客户端ID
- 导航到“API和服务” > “凭据”。
- 点击“创建凭据”并选择“OAuth 2.0客户端ID”。
- 选择“Web应用”或“服务账户”,根据你的需求选择。
- 配置授权重定向URI(例如,
http://localhost:8080/oauth2callback
)。 - 创建客户端ID并下载JSON格式的凭据文件。
5. 实现Google身份验证
在你的REST API中实现Google身份验证,通常使用JWT(JSON Web Tokens)进行验证。
使用Node.js和Express示例
- 安装必要的依赖:
npm install express passport passport-google-oauth20 jsonwebtoken
- 配置Express应用:
const express = require('express'); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20').Strategy; const jwt = require('jsonwebtoken'); const app = express(); // 配置Google策略 passport.use(new GoogleStrategy({ clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: "http://localhost:8080/auth/google/callback" }, (accessToken, refreshToken, profile, done) => { // 这里可以处理用户信息,例如保存到数据库 return done(null, profile); })); // 序列化和反序列化用户 passport.serializeUser((user, done) => { done(null, user); }); passport.deserializeUser((user, done) => { done(null, user); }); // 认证路由 app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] })); app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/login' }), (req, res) => { // 生成JWT const token = jwt.sign({ id: req.user.id }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } ); // 受保护的API路由 app.get('/api/resource', verifyToken, (req, res) => { jwt.verify(req.token, process.env.JWT_SECRET, (err, authData) => { if (err) { res.sendStatus(403); } else { res.json({ message: 'Protected resource', authData }); } }); }); // JWT验证中间件 function verifyToken(req, res, next) { const bearerHeader = req.headers['authorization']; if (typeof bearerHeader !== 'undefined') { const bearerToken = bearerHeader.split(' ')[1]; req.token = bearerToken; next(); } else { res.sendStatus(401); } } app.listen(8080, () => { console.log('Server is running on port 8080'); });
6. 环境变量
确保设置以下环境变量:
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
JWT_SECRET
7. 测试API
使用Postman或其他工具测试你的API,确保只有经过身份验证的用户才能访问受保护的资源。
通过以上步骤,你可以使用Google身份验证来保护你的REST API,确保只有授权用户才能访问敏感数据和功能。