ログインの状態を、サーバーのセッションと JWT のどちらで持ちますか

ふつうの Web のサービスなら、すぐ取り消せるサーバーのセッションを選び、JWT は複数のサービスで同じ証明を確かめたいときに、短く切れる形で使う、と答える問い。ログアウトや取り消しのしやすさ、台を増やすときの持ち方、ブラウザのどこに置くかの引き換えまで話します。

まず 4 択で考える

2 問

答えに入れるべき考えを選びます。選ぶと、すぐに正誤と解説が出ます。そのあと下の欄で、自分の言葉で答えてみます。

  1. 問 1JWT について正しいものはどれか

  2. 問 2ブラウザでログインの証明を置く場所として、正しいものはどれか

2 問中 0 問に答えました

答えてみる

面接官に「ログインの状態を、サーバーのセッションと JWT のどちらで持ちますか」と聞かれたつもりで、答えを見る前に自分の言葉で、声に出して答えてみます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「ログインの状態を、サーバーのセッションと JWT のどちらで持ちますか」
  • 「JWT を使っていて、ログアウトした人の証明を、すぐ使えなくするには」
  • 「JWT ならサーバーで何も覚えなくてよいので、いつも JWT が良いのでは」(裏から聞く形)

面接官が見ている点

  • 仕組みの違いではなく、取り消しのしやすさ、台の増やしやすさ、置き場所の安全さで選べるか
  • JWT は期限まで有効で、途中で取り消すのが難しいと分かっているか
  • ブラウザのどこに置くかで、盗まれ方が変わると分かっているか
  • 「流行っているから」ではなく、サービスの形に合わせて選べるか

短い答え

  • ふつうの Web のサービスなら、サーバーのセッションを選びます。サーバーで消せば、ログアウトや強制的な締め出しがすぐ効くからです。台を増やすときは、セッションを共有の置き場に持ちます。
  • JWT は、署名で中身を確かめられるので、複数のサービスがそれぞれ問い合わせずに確かめたいときに向きます。そのかわり期限までは取り消しにくいので、期限を短くし、長く持つ更新用の証明と組み合わせます。
  • どちらでも、ブラウザでは JavaScript から読めない Cookie (HttpOnly) に置きます。localStorage に置くと、XSS の穴があったときに読み出されます。

この問いを含む分野をレッスンで練習する

レッスンを開く

少し詳しい答え

何が違うか

  • サーバーのセッション ブラウザには意味の無い番号だけを渡し、誰がログインしているかはサーバーの置き場に持ちます。毎回、番号で置き場を引きます
  • JWT 誰か、いつまで有効か、などを書いた中身に署名を付けて、ブラウザに渡します。サーバーは署名を確かめるだけで、置き場を引かなくて済みます

ふつうに使われる署名つきの JWT の中身は暗号ではなく、誰でも読めます。署名が守るのは「書き換えられていないこと」だけなので、秘密の情報は入れません。

取り消しの引き換え

いちばん大きな違いは、途中で取り消せるかです。

  • セッションは、置き場から消せば、次の要求からすぐ使えなくなります。ログアウト、パスワードの変更、怪しい動きでの締め出しが、すぐ効きます
  • JWT は、署名が正しく期限内なら有効です。すぐ取り消したいなら、取り消した証明の一覧をサーバーに持って毎回引くことになり、置き場を引かない良さが消えます

そこで JWT を使うときは、使う証明の期限を数分から十数分ほどに短くし、更新用の証明 (リフレッシュトークン) はサーバーで管理して、取り消せるようにします。期限の長さは、取り消しの遅れをどこまで許せるかで決めます。

台を増やすとき

セッションをサーバーのメモリに持つと、台を増やしたとき、別の台に来た要求ではログインが見つかりません。セッションは、キーバリューの置き場のような、全部の台から読める所に持ちます。これで台は状態を持たずに済み、増やしやすくなります。

ふつうの規模なら、この置き場を 1 回引く手間は小さく、JWT を選ぶ理由にはなりにくいです。JWT が効いてくるのは、多くの別々のサービスが、同じ証明を、共通の置き場に問い合わせずに確かめたいときです。

ブラウザのどこに置くか

  • HttpOnly の Cookie JavaScript から読めないので、XSS の穴があっても中身を盗まれにくくなります。自動で送られるので、CSRF の手当て (SameSite の設定、確認用の値) が要ります
  • localStorage 手で付けて送る形になり、CSRF の心配は減りますが、ページで動くどの JavaScript からも読めます

セッションの番号でも JWT でも、置き場の考え方は同じです。

話すときは、自分が作ったログインの仕組みで、どちらを選び、何を引き換えにしたかの例を 1 つ用意します。話す例は架空の例で構いません。

よくある間違い

  • JWT なら何でも楽になると思う取り消しが難しくなります。ログアウトや締め出しをすぐ効かせたいサービスでは、かえって手間が増えます
  • JWT の期限を長くする漏れたとき、期限まで使われ続けます。短くして、更新用の証明と組み合わせます
  • JWT の中身に秘密の情報を入れる中身は誰でも読めます。署名は書き換えを防ぐだけです
  • 証明を localStorage に置く XSS の穴が 1 つあれば、そのまま読み出されます

深掘りの問い

  • 「ログインした直後に、セッションの番号を替えるのはなぜですか」ログインの前に知られた番号をそのまま使われる攻撃 (セッション固定) を防ぐため、と答えます
  • 「JWT の署名の確かめで気をつけることは」受け入れる署名の方式を決めておき、署名の無い物や想定外の方式は断る、期限の欄も必ず確かめる、と答えます
  • 「スマホのアプリでは」 Cookie を使わないことが多いので、更新用の証明は端末の安全な保管の仕組みに置く、と答えます

確認日 2026年10月30日書き手 小尾 知希 (講師)

技術面接問題の一覧へ戻る