深入浅出Token不局限于Redis(token除了redis)
近些年来,随着前后端分离的技术的发展,Web应用的安全性要求也更高;在传统的用户名/密码验证外,使用Token(令牌) 来增强系统的安全性。Token不局限于Redis,存在多种技术或者组件可以支持Token,以保证系统的安全性。
Token最初用于给客户端证明身份的一种技术,有多种实现方式。由于一次性 Token 的特性,以及Token可以过期、无法猜测、可以增强系统认证的安全性能比传统的 Cookie 安全,所以在 Web 安全性上有了广泛的应用。
其实,Token不局限于Redis,它可以存储在数据库中的“Token 存储表”,比如MySQL、MongoDB等,另外还可以使用文件系统存储,比如NFS把 Token 存放在分布式文件系统上,此外还可以使用缓存系统,比如使用Memchached或者Redis 以及一些分布式锁技术,比如Zookeeper来实现Token存储。
另外,也可以使用Token来改善客户端前后端分离的系统的安全性;由于 Token 的一次性特长和多种存储表示方式,因此可以把 Token 作为客户端访问接口的凭证,即客户端访问接口时带上一个Token,服务端接收到 Token 以后就可以判别客户端的身份,从而强化前后端分离应用的安全监控与隔离。
实现以上技术的核心就是 Token 的创建、维护与验证机制,这里我们使用JWT(JSON Web Token)作为标准:
// 创建Token
let jwt = require(‘jsonwebtoken’);
let token = jwt.sign({
userId:123456
},
‘secret’, {expiresIn:’12h’});
// 验证Token
jwt.verify(token, ‘secret’, function(err, decoded){
if(err)
{
// 错误处理
}
else {
// 提取Token内容并进行处理
console.log(decoded.userId);
}
})
Token不仅仅可以使用Redis存储,还可以使用各种存储机制,这有利于系统的安全性得到更好的保障,而Token技术的核心在于Token的创建、存储和验证。