实现多个应用共享一台鉴权服务器是一个常见的需求,可以提高安全性、简化管理流程并减少重复工作。以下是实现这一目标的基础概念、优势、类型、应用场景以及解决方案。
鉴权服务器(Authentication Server)是负责验证用户身份并授予相应权限的系统。常见的鉴权协议包括OAuth 2.0、OpenID Connect、SAML等。
以下是一个基于OAuth 2.0和JWT的简单实现示例:
使用Node.js和Express框架搭建一个简单的鉴权服务器:
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
const SECRET_KEY = 'your-secret-key';
// 模拟用户数据库
const users = {
'user1': { password: 'password1', roles: ['admin'] },
'user2': { password: 'password2', roles: ['user'] }
};
// 登录接口
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users[username];
if (user && user.password === password) {
const token = jwt.sign({ username, roles: user.roles }, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).json({ message: 'Invalid credentials' });
}
});
// 验证Token中间件
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, SECRET_KEY, (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 resource', user: req.user });
});
app.listen(3000, () => {
console.log('Auth server running on port 3000');
});
客户端应用在需要鉴权的地方调用鉴权服务器的登录接口获取Token,并在后续请求中使用该Token进行身份验证。
fetch('http://localhost:3000/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ username: 'user1', password: 'password1' })
})
.then(response => response.json())
.then(data => {
const token = data.token;
localStorage.setItem('token', token);
});
// 后续请求带上Token
fetch('http://localhost:3000/protected', {
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
}
})
.then(response => response.json())
.then(data => console.log(data));
通过上述方案,可以实现多个应用共享一台鉴权服务器,提高系统的安全性和管理效率。
云+社区技术沙龙[第14期]
云+社区沙龙online [新技术实践]
企业创新在线学堂
算力即生产力系列直播
云+社区沙龙online [云原生技术实践]
云+社区沙龙online [国产数据库]
腾讯云数智驱动中小企业转型升级系列活动
腾讯云数据湖专题直播
云+社区技术沙龙[第15期]
云+社区技术沙龙[第5期]
领取专属 10元无门槛券
手把手带您无忧上云