使用Redis实现安全的单点登录(用redis设置单点登录)

2023-05-09 05:14:29 设置 登录 单点

单点登录(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的首选方案。

相关文章