个人理解:
- LocalStorage:
- 便利性:无法泛域储存,存取比较方便
- 使用方式:只能由 js 取出,加入特定请求头
- 安全性:避免了 csrf,但存在 xss 风险
- httponly cookie:
- 便利性:可泛域储存,无需开发者手动存取
- 使用方式:只能遵循浏览器默认行为,js 无法获取 token
- 安全性:避免了 xss,但存在 csrf 风险
- cookie:
- 便利性:可泛域储存,提供多种使用选择,比较复杂
- 使用方式:
- 可遵循浏览器行为,服务端也只需要验证 cookie
- 可用 js 取出,放入特定请求头;服务端验证特定请求头
- 安全性:
- 遵循浏览器默认行为,则同时存在 xss 和 csrf 风险
- 使用 js 取出,使用请求头认证,可避免 csrf,但存在泛域 xss 风险
所以,如果要开发一个通用的认证系统(即多应用共用的认证),应该使用怎样的 token 储存方案呢?又如何解决这些问题呢?