JWT 到底要存哪裡?

前言

之前討論過關於 JWT 的概念跟使用方法,但是關於 JWT 的儲存方式只講了一般的用法,其實這一部分在網路上眾說紛紜,今天就來聊聊。

存在 web storage

上一篇講到 JWT 是以 header 的方式傳給 server,這個是指把 JWT 存在瀏覽器的 web storage(local storage 或 session storage)上。
這種做法需要注意的幾件事:

  • 不會有 CSRF 危險
  • 可能會有 XSS 攻擊的疑慮,因為 JWT 可以透過 js 來取得。

也有人把 JWT 存在 cookie 裡,存在 cookie 的話可能要注意的幾件事:

  • 需要注意 CSRF 的風險,但是現代前端框架已經開始支援保護 cookie。
  • 為了防止 XSS 攻擊,要設定 HttpOnly ,防止由 javascript 取得 cookie,詳見MDN:HTTP cookies。
  • 如果有跨域需求,要在 header 加上 domain 資訊,但有可能有瀏覽器版本不支援的問題。

結論

關於 JWT 要存在哪到現在還是各有各的說法,沒有一個定論,我想無論如何實作,知道分別的優缺點以及針對需要注意的資安風險做出對應的保護是必須的。

Reference

Where to Store your JWTs – Cookies vs HTML5 Web Storage

MDN:Http Cookies