Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【20221015 Zli 大LT】SPAのセッション管理ってどうすればいいの
Search
kashu
October 15, 2022
Programming
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【20221015 Zli 大LT】SPAのセッション管理ってどうすればいいの
2022年10月15日のZli大LTで発表したスライド
kashu
October 15, 2022
More Decks by kashu
See All by kashu
【2022/12/17 学内LT】学内環境にasdfを入れてみた &&NEC IXルーターを買ってみた
kashu02
0
200
【2022/11/20 学内LT】 ぼくのかいはつかんきょうしょうかい
kashu02
0
61
Other Decks in Programming
See All in Programming
Introducing Stack Pull Request in GitHub
kkamegawa
0
110
信頼性の目標を誰も求めてない
shubox
0
140
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
730
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
1
790
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.8k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
450
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
230
T3DD26: From RAGs to Riches
martinhelmich
0
110
源内ハンズオン概要編
hideg
0
220
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
170
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
The World Runs on Bad Software
bkeepers
PRO
72
12k
Deep Space Network (abreviated)
tonyrice
0
270
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
530
The untapped power of vector embeddings
frankvandijk
2
1.8k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
650
What's in a price? How to price your products and services
michaelherold
247
13k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Everyday Curiosity
cassininazir
0
290
Transcript
SPAのセッション管理って どうすればいいの? 会津大学 学部1年 kashu
自己紹介 名前: 粕谷 俊介 (kashu, かしゅー, かーしゅ, かしゅ etc..) s1300071
(学部1年) Zli所属 (REMsも所属?) Node.jsをやってきた。 インフラにも興味がある。自宅サーバー最高! GoとReactをやらなければならない。 なにもできません!教えてください! @kasukashu02 2
目次 1. なんでこの話をするの 2-1. セッション認証とトークン認証 - セッション認証 2-2. セッション認証とトークン認証 -
トークン認証 3-1. CookieとWeb Storage - Cookie 3-2. CookieとWeb Storage - Web Storage 4. つまりどうすればいいの 3
1. なんでこの話をするの? ハッカソンでWebアプリを制作(中) →SPAでセッション情報ってどうやって持つのがいいんやろ 4
2-1. セッション認証とトークン認証 セッション認証 - SessionIDをサーバー側で発行して、 SessionIDとユーザ情報を紐づけたデータを DBに保存 - ブラウザ側でSessionIDを保存 特徴
・一番よく見る ・ステートフル デメリット ・いちいちDBにアクセス ・インメモリデータベースを使うと、スケールが大変 メリット ・サーバー側でログアウトができる 5
2-2. セッション認証とトークン認証 トークン認証 - ユーザー情報が含む暗号化されたトークンを サーバー側で発行 - ブラウザ側でTokenを保存 - リクエスト毎にデコードする
特徴 ・ステートレス ・JWT(JSON Web Token)が多く用いられる デメリット ・不正アクセスがあってもサーバー側でログアウトできない ・リクエストが重くなる メリット ・サーバー側でログイン状態を持つ必要がない 6
3-1. CookieとWeb Storage Cookie 7 - key-value形式で保存 - Set-Cookieヘッダを受け取り、ブラウ ザにCookieを設定
- Set-Cookieヘッダを返したドメインの み、Cookieを送信 属性 Path: 指定したパスが含まれている場合にのみ送信 Domain: 指定した場合、サブドメインを含む Expires: Cookieの有効期限(時刻指定) Max-Age: Cookieの有効期限(経過時間指定) Secure: HTTPSの場合のみCookieを送信 SameSite: CSRF対策に有効 HttpOnly: JavaScriptでアクセスできない(XSS対策に有効) (基本的に)CSRFトークンの実装が必要 !
3-2. CookieとWeb Storage Web Storage 8 - (Cookieと比べれば)最近できた - sessionStorageとlocalStorageがある。
- 同一オリジンの場合にのみアクセス可能 - Cookieよりも容量が大きい - JavaScriptからアクセス可能←XSSの可能性! - 指定しなければ勝手に送信されない ←CSRFの可能性はない Web Storage XSS対策をする必要がある→めんどくさすぎ(というか無理なのでは)
4. つまりどうすればいいの SPAとAPIが同一オリジンの場合 - CookieのSameSite属性をつけて、セッション認証 - CookieのSameSite属性をつけて、トークン認証 (ただし、サーバーサイドから任意のタイミングでログアウトできない ) SPAとAPIが別オリジンの場合
- Cookieでセッション認証。CSRFトークンも必要 - Cookieでトークン認証。CSRFトークンも必要 (ただし、サーバーサイドから任意のタイミングでログアウトできない && CSRFトークンをJWTの中に暗号化して保存する必要 ∵JWTのPayloadは確認できる) 9
ご静聴ありがとうございました! 10