介绍一下Token?

Token在安全中应用广泛,如防止表单提交,防止有人伪造客户端请求。在实际的开发中,我们已经不需要在写Token,可以直接使用已经封装好的类就可以了。但是,我们需要了解这其中的原理,那我就简单的聊一下这方面。

     什么是Token? Token可以理解为令牌,服务器通过验证Token,来判断你是否有操作的权限。Token的重要特性是有效性,一般Token只是在一定时间内有效。超出时间就限制其操作,让其重新获取Token !


简单的Token实现?
      一个简单的Token可以由密钥,时间戳,内容生成。在网络传输过程中一般通过base64_encode密码传输。服务器通过base64_decode解码之后,再验证Token的有效性。

Token存储?
  1. 存在MySQL类型数据库中。这样做的好处,可以存储的数量大,数据持久化。
  2. 存在内存中,如Cache。优点就是,验证速度快。
  3. 不存储,每次服务器通过算法验证Token的有效性。
     对于我们客户端来说,另一个关键点就是Token的存储。可以存在SP中。

token模式是一种常见的安全设计模式,通过分离短期和长期凭证,以及用户直接使用的token和用于刷新的token,来提高系统的安全性和灵活性,该模式特别适用于需要与第三方应用共享权限而又不泄露用户敏感信息的场景[^1]。 双token模式中常用的JWT(JSON Web Token),常用于无状态访问令牌,配合签名和加密保证安全性。以Node.js + Express为例,在登录接口生成双Token的代码如下: ```javascript const jwt = require('jsonwebtoken'); app.post('/login', (req, res) => { // 验证用户名密码(伪代码) const { username, password } = req.body; const user = authenticate(username, password); // 生成双Token const accessToken = jwt.sign( { userId: user.id }, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '15m' } ); const refreshToken = jwt.sign( { userId: user.id }, process.env.REFRESH_TOKEN_SECRET, { expiresIn: '7d' } ); // 存储Refresh Token到数据库(伪代码) saveRefreshToken(user.id, refreshToken); res.json({ accessToken, refreshToken }); }); ``` 双Token机制(Access Token + Refresh Token)具有安全高效的特点,在多个方面展现出优势。在安全性提升上,Access Token短有效期降低泄露风险,Refresh Token通过HttpOnly Cookie保护,设备指纹绑定防止跨设备滥用;用户体验优化方面,具备无感知自动刷新机制,支持多设备独立会话管理;系统扩展性上,易于实现令牌吊销列表(黑名单),支持细粒度权限变更实时生效;还能保障合规性,符合OAuth 2.0规范,满足GDPR等数据保护要求。此外,在数据兼容方面可保持旧Token验证逻辑1周,双写Refresh Token到新旧Redis结构[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值