なぜならXSSが発生している場合に、誰にも気づかれずにトークン収集されたりセッションハイジャックされる恐れがあるから。
XSS自体を対策すればいいというのはもちろんだが、ブラウザやサーバー、ミドルウェアなどのバグによっても引き起こされるため、一概にコーダーが悪だとはいえない。なので、XSSが発生した場合のことも考慮して実装する必要性が生じる。
特にLocal Strageでセッション管理を使用すると、JavaScriptで簡単に取得できてしまう。
そのため、いわゆるクッキーセッションのようにセッションサーバーを立てて、JWTとは関係のないセッションIDをCookieに保存するやり方のほうが、セキュアである。
またCookieの場合は、httpOnly属性を付与するとJavaScriptからアクセスできなくなるため、必ずhttpOnly属性を付与する(HTTPSプロトコル のみを許可するSecure属性も)。
ちなみにCookieはSame Origin Policyに完全に対応しているわけではなく、ホストが同じでポートやURLスキームが異なる場合だったらCookieが送信されてしまうので、留意しておく。