redis实现手机号短信登录,优化成JWT 登录认证(用户登录时生成jwttoken) + Redis 自动续期,还能怎么优化呢?
进一步优化:使用双token嘛?再加上rabbitmq?
redis实现手机号短信登录,优化成JWT 登录认证(用户登录时生成jwttoken) + Redis 自动续期,还能怎么优化呢?
进一步优化:使用双token嘛?再加上rabbitmq?
2 回答3.1k 阅读
1 回答1.9k 阅读✓ 已解决
2 回答1.2k 阅读
1 回答1.5k 阅读
1 回答1.4k 阅读
753 阅读
双Token机制是指使用 Access Token 和 Refresh Token 来增强安全性和用户体验。
实现方式:
Access Token:
用于用户身份验证和授权访问资源。
有效期较短(如15分钟)。
存储在客户端(如LocalStorage或Cookie)。
Refresh Token:
用于在Access Token过期后获取新的Access Token。
有效期较长(如7天)。
存储在服务端(Redis)并与用户ID关联。
流程:
用户登录成功后,生成Access Token和Refresh Token。
将Refresh Token存储在Redis中,并设置过期时间。
客户端每次请求携带Access Token。
当Access Token过期时,客户端使用Refresh Token请求新的Access Token。
服务端验证Refresh Token的有效性,生成新的Access Token并返回给客户端。
如果Refresh Token也过期,则用户需要重新登录。
优点:
减少频繁登录,提升用户体验。
增强安全性,避免Access Token长期暴露。
RabbitMQ可以用于异步处理与登录相关的任务,例如:
短信发送。
登录日志记录。
用户行为分析。
实现方式:
短信发送:
用户请求登录时,将短信验证码生成任务发送到RabbitMQ队列。
消费者从队列中获取任务并发送短信。
登录日志记录:
用户登录成功后,将登录信息(如用户ID、IP地址、时间)发送到RabbitMQ队列。
消费者从队列中获取日志并存储到数据库或日志系统。
用户行为分析:
将用户登录行为发送到RabbitMQ队列,供后续分析使用。
优点:
解耦核心登录逻辑和非核心任务,提升系统性能。
提高系统的可扩展性和可靠性。
(1)Token自动续期
在用户每次请求时,检查Access Token的剩余有效期。
如果剩余有效期较短(如5分钟),则自动生成新的Access Token并返回给客户端。
避免用户频繁使用Refresh Token。
(2)Token黑名单
当用户主动退出登录或Token被盗用时,将Token加入黑名单(存储在Redis中)。
每次验证Token时,检查是否在黑名单中。
(3)限流与防刷
使用Redis实现短信发送的限流(如每分钟最多发送1次)。
使用IP或设备ID限制登录尝试次数,防止暴力破解。
(4)多设备管理
在Redis中存储用户与设备的映射关系,支持多设备登录。
当用户在一个设备上退出登录时,清除该设备的Token。
(5)Token加密
对JWT Token进行加密存储,防止Token被篡改或泄露。
用户登录:
用户输入手机号和短信验证码。
服务端验证验证码,生成Access Token和Refresh Token。
将Refresh Token存储在Redis中,设置过期时间。
返回Access Token和Refresh Token给客户端。
Token自动续期:
每次请求时检查Access Token的剩余有效期。
如果剩余有效期较短,生成新的Access Token并返回。
双Token机制:
Access Token过期后,客户端使用Refresh Token请求新的Access Token。
服务端验证Refresh Token的有效性,生成新的Access Token。
RabbitMQ异步任务:
将短信发送、登录日志记录等任务发送到RabbitMQ队列。
消费者异步处理这些任务。
安全与限流:
使用Redis实现Token黑名单和限流功能。
对Token进行加密存储。