大家好!今天咱们来聊聊怎么给公司里的各个系统搭建一个统一的身份认证机制。比如你登录OA系统后,可以无缝跳转到ERP系统,而不需要再次输入账号密码。这种体验是不是很棒?接下来我就教大家怎么做!
首先,我们需要了解什么是“统一身份认证”。简单来说,就是所有系统共享同一个用户数据库,并且用户只需要登录一次就能访问所有授权的应用。这听起来是不是很酷?
我们要实现这个功能,可以用JWT(JSON Web Token)来做。JWT是一种轻量级的安全令牌,它可以在不同服务之间传递信息,而且是加密过的,非常安全。
假设我们现在有一个公司系统,包括HR管理系统和财务系统。我们希望员工登录HR系统后,可以直接进入财务系统。那么第一步就是创建一个认证服务器。我们可以用Node.js快速搭建一个简单的认证服务。
首先安装必要的依赖:
npm install express jsonwebtoken bcryptjs
然后创建一个基本的Express应用:
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const app = express(); app.use(express.json()); // 模拟用户数据 const users = [ { id: 1, username: 'admin', password: 'password' } ]; // 登录接口 app.post('/login', (req, res) => { const { username, password } = req.body; // 查找用户 const user = users.find(u => u.username === username); if (!user || !bcrypt.compareSync(password, user.password)) { return res.status(401).json({ message: 'Invalid credentials' }); } // 创建JWT令牌 const token = jwt.sign({ userId: user.id }, 'secret_key', { expiresIn: '1h' }); res.json({ token }); }); // 保护路由 function authenticateToken(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (!token) return res.sendStatus(401); jwt.verify(token, 'secret_key', (err, user) => { if (err) return res.sendStatus(403); req.user = user; next(); }); } // 示例受保护的API app.get('/protected', authenticateToken, (req, res) => { res.json({ message: `Hello ${req.user.userId}` }); }); app.listen(3000, () => console.log('Authentication server running on port 3000'));
这样我们就有了一个基础的认证服务器。当用户登录时,会返回一个JWT令牌,后续请求中携带这个令牌就可以验证身份了。
最后,为了让其他系统使用这个认证服务,每个系统都需要验证这个JWT令牌。比如在HR系统中,每次请求财务系统的接口时,都带上这个JWT令牌,财务系统解码后确认用户身份即可。
总结一下,我们通过JWT实现了公司内系统的统一身份认证。这种方式不仅方便,还提高了安全性。希望这篇教程对你有所帮助!
好啦,今天的分享就到这里,如果有任何问题欢迎随时提问哦!
]]>