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.2k
0
Share
【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
52
Other Decks in Programming
See All in Programming
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
14
4.4k
アーキテクチャモダナイゼーションとは何か
nwiizo
19
5.6k
AI-DLC Deep Dive
yuukiyo
9
5k
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
640
Running Swift without an OS
kishikawakatsumi
0
860
Vibe NLP for Applied NLP
inesmontani
PRO
0
530
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.1k
Don't Prompt Harder, Structure Better
kitasuke
0
800
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
880
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
290
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
500
GoogleCloudとterraform完全に理解した
terisuke
1
170
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
6.9k
Speed Design
sergeychernyshev
33
1.6k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
330
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
280
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Crafting Experiences
bethany
1
130
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
360
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
Visualization
eitanlees
150
17k
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