Web 前端储存 token 应该用 LocalStorage,httponly cookie 还是 cookie 呢?

个人理解:

  • LocalStorage:
    • 便利性:无法泛域储存,存取比较方便
    • 使用方式:只能由 js 取出,加入特定请求头
    • 安全性:避免了 csrf,但存在 xss 风险
  • httponly cookie:
    • 便利性:可泛域储存,无需开发者手动存取
    • 使用方式:只能遵循浏览器默认行为,js 无法获取 token
    • 安全性:避免了 xss,但存在 csrf 风险
  • cookie:
    • 便利性:可泛域储存,提供多种使用选择,比较复杂
    • 使用方式:
      • 可遵循浏览器行为,服务端也只需要验证 cookie
      • 可用 js 取出,放入特定请求头;服务端验证特定请求头
    • 安全性:
      • 遵循浏览器默认行为,则同时存在 xss 和 csrf 风险
      • 使用 js 取出,使用请求头认证,可避免 csrf,但存在泛域 xss 风险

所以,如果要开发一个通用的认证系统(即多应用共用的认证),应该使用怎样的 token 储存方案呢?又如何解决这些问题呢?


Preview:

Cancel