You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net Web API如何安全存储用户自定义权限列表

解决方案:大权限列表的安全缓存与RESTful兼容实现

方案1:短会话令牌+Redis后端缓存

登录成功后,生成一个短的唯一会话令牌(比如UUID),把完整权限列表以该令牌为key存入Redis,同时设置与登录有效期一致的过期时间。

  • 前端将这个短令牌存入HttpOnly、Secure、SameSite=Strict的Cookie中(令牌仅几十字节,远低于4KB限制)
  • 每次API请求时,Cookie自动携带到后端,后端用令牌从Redis读取权限列表做校验
  • 优势:彻底规避Cookie体积限制,权限存储在后端安全可控,不破坏RESTful架构(令牌仅作为会话标识,后端无状态处理请求);Redis读写性能足以支撑高并发
  • 注意点:配置Redis持久化策略避免重启丢失缓存;令牌过期时间与登录态同步,用户登出时及时删除Redis对应键值对

方案2:前端LocalStorage缓存权限+JWT签名校验

把权限列表存在前端LocalStorage,JWT令牌只保留用户ID、过期时间、权限列表哈希值(比如SHA-256计算)这类核心字段:

  • 每次请求时,前端将JWT放在Authorization: Bearer <token>请求头,同时把权限列表放在自定义请求头(如X-User-Permissions)中
  • 后端先验证JWT签名有效性,再根据用户ID从数据库快速获取权限哈希值,与JWT中的哈希比对:
    • 一致则直接用前端传入的权限校验,无需查完整权限
    • 不一致说明权限被篡改或更新,重新从数据库读取最新权限返回给前端更新缓存
  • 优势:无需后端内存存储,前端缓存减少DB查询;JWT体积小,可正常存入Cookie或LocalStorage
  • 注意点:做好XSS防护(开启CSP、转义用户输入),避免LocalStorage权限被窃取;哈希计算确保不可逆,防止伪造

方案3:权限拆分+按需加载

将权限拆分为粗粒度基础权限和细粒度动态权限:

  • 粗粒度权限(如user_module_view、user_add)体积小,直接存入JWT令牌并放在Cookie中
  • 细粒度权限(如allowed_id_client这类含大量ID的权限),在用户首次访问对应功能模块时,前端发起单独API请求获取,并存入LocalStorage/SessionStorage,后续访问该模块直接用缓存权限
  • 优势:初始JWT体积可控,避免Cookie超限;按需加载减少登录时的初始数据传输量
  • 注意点:设计合理的权限拆分规则,确保基础权限覆盖大部分常规校验;细粒度权限缓存设置合理过期时间,或在权限更新时主动通知前端刷新

内容的提问来源于stack exchange,提问作者blane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:28:30