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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Wagyu
June 01, 2026
Programming
110
0
Share
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
Wagyu
June 01, 2026
Other Decks in Programming
See All in Programming
3Dシーンの圧縮
fadis
1
630
AIエージェントの隔離技術の徹底比較
kawayu
0
460
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.5k
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
340
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.6k
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
450
The NotImplementedError Problem in Ruby
koic
1
570
New "Type" system on PicoRuby
pocke
1
460
dRuby over BLE
makicamel
2
310
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.5k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
17
5.9k
Featured
See All Featured
Fireside Chat
paigeccino
42
3.9k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Scaling GitHub
holman
464
140k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Designing Powerful Visuals for Engaging Learning
tmiket
1
400
For a Future-Friendly Web
brad_frost
183
10k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
New Earth Scene 8
popppiees
3
2.3k
Test your architecture with Archunit
thirion
1
2.3k
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