自分向けのメモ。なお、ここでのJWTはアクセストークンとしてのJWTを指している。

LocalStorage or Cookie


この辺りがよくないのは認識していて、そのため調べているという経緯がある。ちなみに理由は下記の記事とかにまとまっている。

SPA認証トークン、Cookieに保存するか?LocalStorageに保存するか?

かいつまんで書くと…

  • localstorage -> XSS
  • Cookie -> CSRF

の問題がある。

Web worker


Auth0のドキュメントをみているとToken StorageBrowser in-memory scenariosの項に下記のような記述があるのを見つけた。

Auth0 recommends storing tokens in browser memory as the most secure option. Using Web Workers to handle the transmission and storage of tokens is the best way to protect the tokens, as Web Workers run in a separate global scope than the rest of the application.

これを読むとWeb workerに保存するのを勧めると書いてある。この方法に言及しているのは他に見かけたことがなかったのでもう少し検索してみたところ、他サイトでも言及しているのがあった。

FusionAuth: Building a Secure Signed JWT

An alternative to a cookie with these flags would be using a web worker to store the token outside of the main JavaScript context

ただし、実装方法のサンプルとかは見当たらなかった。そもそもWeb workerに対する知識がほとんどないのでもう少し踏み込んで調べないとダメそう。

Auth0


Auth0でやる場合、auth0-spa-jsを使えばこの辺りはよしなにやってくれる。Token StorageBrowser in-memory scenariosの項に書いてある。

Use Auth0 SPA SDK whose default storage option is in-memory storage leveraging Web Workers.