ASP.NET Core自定义ITicketStore返回错误用户身份问题求助
生产环境出现用户被认证为已登出历史用户身份的问题
架构说明:自定义实现
ITicketStore,将认证票据同时存储至Redis与MySQL,Redis作为缓存层用于降低MySQL的读写流量。登录流程为:用户通过Login端点完成登录,票据存入ITicketStore后获得响应Cookie,随后被重定向至Duende IdentityServer的AuthorizeCallbackEndpoint中间件。异常表现:
- 用户反馈在仪表盘页面看到非本人的其他用户数据;
- 应用日志显示,用户重定向到
AuthorizeCallbackEndpoint时,使用的是登录阶段生成的正确密钥从ITicketStore获取票据,但该端点返回的Cookie对应的用户身份并非当前登录用户; - 初步推测
ITicketStore存在逻辑异常:通过正确密钥查询时返回了错误的票据值,甚至可能返回已在Redis中删除的登出用户的旧票据。
排查进展:
- 测试环境、预发布环境均无法复现该异常;
- 生产环境已稳定运行6个月,无相关问题上报,首次出现异常为2024年1月29日;
- 针对自定义
ITicketStore开展独立性能测试:用11个并行线程反复执行读写操作,Redis缓存的所有操作均表现正常。
内容的提问来源于stack exchange,提问作者user23368336
相关产品推荐
相关产品推荐

