深入浅出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的创建、存储和验证。


数据运维技术 » 深入浅出Token不局限于Redis(token除了redis)