使用Redis实现安全的单点登录(用redis设置单点登录)
单点登录(Single Sign On,简称:SSO)是指当用户登录系统之后,就可以访问所有相关系统及数据,而无需在每一个系统中重复输入用户名和密码。因此,避免了重复登录,提升用户体验和工作效率,被广泛应用在企业的内部身份验证及外部的社交登录中。
使用Redis实现简单的SSO,用户只需要经过一次登陆即可访问所有系统,而无需重新登陆。大致原理如下:
1. 用户输入用户名和密码,系统验证账号密码是否正确;
2. 账号密码正确后,后端服务生成token(考虑到安全性,token需要设置有效期);
3. 后端将token值存储在Redis中,key=token,value=userId;
4. 将token值返回给前端,前端将token作为凭证,保存在客户端的Cookie中;
5. 后续的访问,前端将token值携带在请求中;
6. 请求到达后端后,后端会从Redis中检索相应的token,如果token存在,则表示用户已登录,可以正常访问系统;
7. 如果token不存在或者已超时,则表示用户尚未登陆,此时需要重新登陆。
如果应用程序有多个子系统,例如ERP、CRM、HR系统,则这些系统可以统一使用一个token登录,实现SSO,以下是使用Node.js + Redis实现SSO功能的简单示例:
// 创建token
function createToken(userId) {
const token = crypto.randomBytes(16).toString(‘hex’);
// 将token和userId相关联
redisClient.set(token, userId, ‘EX’, 1800); // 设置有效期半小时
return token;
}
// 验证token
function verifyToken(token) {
return redisClient.get(token).then(userId => {
if (userId) {
return Promise.resolve(userId);
} else {
return Promise.reject(‘token已失效’);
}
});
}
通过Redis可以实现SSO功能,可以有效降低用户登录负担,使用户体验得到显著提升,同时也可以有效提高系统安全性,是实现SSO的首选方案。