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
0
1.2k
【20221015 Zli 大LT】SPAのセッション管理ってどうすればいいの
2022年10月15日のZli大LTで発表したスライド
kashu
October 15, 2022
Tweet
Share
More Decks by kashu
See All by kashu
【2022/12/17 学内LT】学内環境にasdfを入れてみた &&NEC IXルーターを買ってみた
kashu02
0
190
【2022/11/20 学内LT】 ぼくのかいはつかんきょうしょうかい
kashu02
0
48
Other Decks in Programming
See All in Programming
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
3
1.2k
『Kubernetes ☸️ で実践する Platform Engineering 』を最高速度で読み抜いたる!!👊🏻
hiroki_hasegawa
0
100
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
510
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.9k
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
570
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
310
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
500
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
480
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.3k
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
340
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
310
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2k
Scaling GitHub
holman
464
140k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
85
Typedesign – Prime Four
hannesfritz
42
3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
250
YesSQL, Process and Tooling at Scale
rocio
174
15k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
320
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Facilitating Awesome Meetings
lara
57
6.8k
A Tale of Four Properties
chriscoyier
163
24k
HDC tutorial
michielstock
1
560
Claude Code のすすめ
schroneko
67
220k
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