Token安全靠自身,无需Redis加固(token不加redis)
Token安全靠自身,无需Redis加固
维护安全乃构建安全系统的基石,在当下的网络系统中,实现Token安全是一件大事。常用的Token安全方案有Session和JWT这两种。其中,SessionToken采用Redis加强,而对于JWT来说,则是可以直接不用Redis加强安全,自身就能保持安全。
为什么JWT有能力实现自身安全,而不用Redis,这在于JWT自成一套生命周期管理系统,当然,使用Redis可以增加安全等级,但是也不绝对。
首先是JWT的本质,JWT的协议由头部、Payload和Signature三部分组成,头部Header用来描述关于Token的有关信息,例如是JWT类型,签发者,使用的算法等。紧接着是Payload,它包含了Token的声明,也就是有效负载,它真正存储有用的信息,比如Token的创建时间、过期时间等,它可以采用base64url编码来隐蔽这些信息,然后最后一部分Signature是使用保存在头部Header中的算法生成的签名,签名由三部分Header、Payload以及一个密钥(secret)组成
因此,采用JWT的安全机制来实现Token安全的话,就可以利用这种本质的机理实现Token的安全,无需Redis加固,这也就是为什么JWT既可以实现安全,又可以不用Redis加强安全的原因。
以下是JWT实现Token安全的代码实例。
下面就是签发Token的部分
“`java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
public static String generateToken(String secret, long expireTime) {
Date now = new Date();
Date expireDate = new Date (now.getTime() + expireTime);
// 生成签名
return Jwts.builder()
// 设置token基本信息
.setHeaderParam(“typ”, “JWT”)
.setSubject(“security”)
.setIssuedAt(now)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS256, secret)
.compact();
}
}
jwt的安全措施依赖于调整了Token的生命周期,在构建的Token中,记录了相关的声明,用来管理Token的生命周期,以此实现安全,所以JWT本身并不需要借助于Redis加强安全,而是可以自身完成安全。
JWT很轻松地实现了不用Redis加固Token的安全,没必要采用Redis加固,但是采用JWT的前提,设计Token机制比较晦涩,切记安全要加强,使用JWT是一个很好的选择。