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
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
Search
Wagyu
June 01, 2026
Programming
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
Wagyu
June 01, 2026
Other Decks in Programming
See All in Programming
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
620
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
150
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.3k
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
8
3k
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
430
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
110
どこまでゆるくて許されるのか
tk3fftk
0
520
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
400
Featured
See All Featured
New Earth Scene 8
popppiees
3
2.4k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
For a Future-Friendly Web
brad_frost
183
10k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
From π to Pie charts
rasagy
0
240
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
A designer walks into a library…
pauljervisheath
211
24k
Transcript
1 Spring Security 実践 GraphQL APIで実務に役⽴つ 認証‧認可 を学ぶ JJUG CCC
2026 Spring #jjug_ccc #jjug_ccc_m
2 • Wagyu(X:@Wagyu_moomoo) • ソフトウェアエンジニア5年⽬ • Java/Spring Boot を中⼼とした開発に従事 •
趣味はバスケ、旅⾏、登⼭ ⾃⼰紹介 2 #jjug_ccc #jjug_ccc_m
1. なぜGraphQLなのか 2. 認証‧認可の基礎 3. 認証‧認可 全体の流れ 4. 認証処理の実装 5.
認可処理の実装(RBACとABAC) 6. まとめ アジェンダ 3 #jjug_ccc #jjug_ccc_m
1. なぜGraphQLなのか 4
• RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス構造を定義
クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要がある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 5 VS #jjug_ccc #jjug_ccc_m
• RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス
構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 6 #jjug #jjug_ccc GraphQL = 柔軟性が⾼い 6 #jjug_ccc #jjug_ccc_m
• GraphQLを採⽤するケース ◦ 権限ごとに返却項⽬を切り替えたい ◦ クライアントごとに必要項⽬が異なる ◦ BFFとして利⽤したい 1. なぜGraphQLなのか
7 #jjug_ccc #jjug_ccc_m
8 1. なぜGraphQLなのか • GraphQLの注意点 ◦ 柔軟性が⾼いことによる罠 ▪ RESTでは、通常サーバサイドでレスポンス項⽬を固定する ▪
DTOに定義した項⽬だけが返却される 8 #jjug_ccc #jjug_ccc_m
9 1. なぜGraphQLなのか • GraphQLの注意点 ◦ 柔軟性が⾼いことによる罠 ▪ GraphQLは、取得項⽬をクライアントが選択可能 ▪
フィールド単位の認可設計が重要 9 #jjug_ccc #jjug_ccc_m
• RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス
構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 10 #jjug #jjug_ccc 「取得できる」 != 「⾒えてよい」 10 #jjug_ccc #jjug_ccc_m
2. 認証‧認可の基礎 11
• 認証(Authentication) ◦ ユーザーが誰であるかを確認するプロセス • 認可(Authorization) ◦ ユーザーが何をできるかを制御するプロセス 2. 認証‧認可の基礎
12 #jjug_ccc #jjug_ccc_m
• 認証(Authentication) ◦ ユーザーが誰であるかを確認するプロセス • 認可(Authorization) ◦ ユーザーが何をできるかを制御するプロセス 2. 認証‧認可の基礎
13 あなたは誰? #jjug_ccc #jjug_ccc_m
• 認証(Authentication) ◦ ユーザーが誰であるかを確認するプロセス • 認可(Authorization) ◦ ユーザーが何をできるかを制御するプロセス 2. 認証‧認可の基礎
14 何ができる? #jjug_ccc #jjug_ccc_m
3. 認証‧認可 全体の流れ 15
16 16
• RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス
構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 17 #jjug #jjug_ccc JWTの読み⽅は ”ジョット”らしい 17 #jjug_ccc #jjug_ccc_m
4. 認証処理の実装 18
• ログイン時の認証 ◦ ⼊⼒値の検証 ◦ 認証処理の委譲 ◦ トークンの⽣成 4. 認証処理の実装
• ログイン時の認証 ◦ ⼊⼒値の検証 ◦ 認証処理の委譲 ◦ トークンの⽣成 4. 認証処理の実装
• JWT⽣成 ◦ 認可に必要な情報をJWTに格納する ◦ JWTの有効期限(exp)を設定してセキュリティを強化 4. 認証処理の実装
• JWT⽣成 ◦ 認可に必要な情報をJWTに格納する ◦ JWTの有効期限(exp)を設定してセキュリティを強化 4. 認証処理の実装
23 • リクエストの認証 ◦ JWTをBearer Tokenとして送信 ◦ SecurityFilterChain がJWTを検証 ◦
Authentication を⾃動⽣成 4. 認証処理の実装
24 4. 認証処理の実装 • リクエストの認証 ◦ JWTをBearer Tokenとして送信 ◦ SecurityFilterChain
がJWTを検証 ◦ Authentication を⾃動⽣成
5. 認可処理の実装(RBACとABAC) 25
26 • ロールベースアクセス制御(Role-Based Access Control) ◦ ロールに基づいてアクセス制御を⾏う • 属性ベースアクセス制御(Attribute-Based Access
Control) ◦ 属性やコンテキストに基づいてアクセス制御を⾏う 5. 認可処理の実装(RBACとABAC) 26 #jjug_ccc #jjug_ccc_m
27 • JWTを使ったRBAC ◦ JWTからロール情報を安全に復元 ▪ roles を GrantedAuthority へ変換
▪ Spring Securityの認可で利⽤ 5. 認可処理の実装(RBACとABAC)
28 ◦ GraphQLリゾルバに認可を適⽤ ▪ ⼀括認可: @QueryMapping でクエリ全体の実⾏可否を制御 ▪ 個別認可: @SchemaMapping
で特定のフィールドをピンポイントに制御 5. 認可処理の実装(RBACとABAC)
29 ◦ GraphQLリゾルバに認可を適⽤ ▪ ⼀括認可: @QueryMapping でクエリ全体の実⾏可否を制御 ▪ 個別認可: @SchemaMapping
で特定のフィールドをピンポイントに制御 5. 認可処理の実装(RBACとABAC)
• RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス
構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 30 #jjug #jjug_ccc N+1問題やパフォーマンス の低下には注意! 30 #jjug_ccc #jjug_ccc_m
31 • JWTを使ったABAC ◦ GraphQLリゾルバに認可を適⽤ ▪ JWT の属性情報を利⽤ ▪ 複雑な条件は
Service へ分離 5. 認可処理の実装(RBACとABAC)
5. 認可処理の実装(RBACとABAC) • RBACとABACの使い分け ◦ RBAC ▪ 役割ごとの境界線が明確な場合 ▪ シンプルな権限制御向け
◦ ABAC ▪ 役割以外の要因で制御したい場合 ▪ 柔軟な条件制御向け 32 #jjug_ccc #jjug_ccc_m
• RBACとABACの使い分け ◦ ハイブリッド運⽤ ▪ 実務ではRBACとABACを併⽤するケース (ロールで⼤枠を制御し、属性で細かく制御)が選択されやすい ▪ その場合、両⽅の情報をJWTに含める実装も可能 5.
認可処理の実装(RBACとABAC) 33 #jjug #jjug_ccc RBAC/ABACは ハイブリッド運⽤しよう! 33 #jjug_ccc #jjug_ccc_m
6. まとめ 34
• 認証と認可は別の処理として実装する ◦ 認証:ユーザーを特定し、JWTを発⾏ ◦ 認可:JWTの情報を元にアクセス可否を判断 • JWTは認可に必要な情報を持つ ◦ roles
→ RBACで利⽤ ◦ attributes(department, location など)→ ABACで利⽤ • Spring Securityにより、 JWTの検証とAuthentication⽣成は⾃動化される 6. まとめ 35 #jjug_ccc #jjug_ccc_m
• 次のステップ ◦ ⾃分のプロジェクトに適⽤ ▪ 今⽇学んだ内容を、⾃分のプロジェクトに取り⼊れてみる ◦ セキュリティ技術の深掘り ▪ さらに⾼度な認証‧認可の仕組みを学習してみる
6. まとめ 36 #jjug_ccc #jjug_ccc_m
ご清聴ありがとうございました。 質問&雑談 大歓迎です! ぜひ話しかけて下さい!! 37 セッション アンケート 全体 アンケート #jjug_ccc
#jjug_ccc_m