小王:嘿,小李,我们最近需要开发一个统一身份认证平台,你觉得我们应该从哪里开始呢?
小李:首先,我们需要明确这个平台的需求。比如,我们需要支持哪些认证方式(如密码、短信验证码、第三方登录等)?需要哪些API接口?
小王:明白了。那我们先从最基础的身份验证开始吧。我们可以使用JWT(JSON Web Token)来实现用户登录后的身份验证。
小李:好的。下面是使用Node.js和Express框架创建一个简单的JWT认证服务器的代码示例:
const express = require('express'); const jwt = require('jsonwebtoken'); const app = express(); const secretKey = 'your_secret_key'; app.use(express.json()); // 用户信息模拟数据 const users = [ { id: 1, username: 'user1', password: 'password1' }, { id: 2, username: 'user2', password: 'password2' } ]; // 登录接口 app.post('/login', (req, res) => { const { username, password } = req.body; const user = users.find(u => u.username === username && u.password === password); if (user) { const token = jwt.sign({ id: user.id }, secretKey, { expiresIn: '1h' }); return res.status(200).json({ token }); } else { return res.status(401).json({ message: 'Invalid credentials' }); } }); // 保护路由中间件 function authenticateToken(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (token == null) return res.sendStatus(401); jwt.verify(token, secretKey, (err, user) => { if (err) return res.sendStatus(403); req.user = user; next(); }); } // 受保护的路由 app.get('/protected', authenticateToken, (req, res) => { res.json({ message: 'This is a protected route', user: req.user }); }); app.listen(3000, () => console.log('Server running on port 3000')); ]]>
小王:这看起来非常不错!我们可以通过调用/login接口来获取JWT令牌,然后在其他受保护的API请求中使用这个令牌。
小李:是的,这样可以确保只有经过身份验证的用户才能访问受保护的资源。