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
260
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
Oxcを導入して開発体験が向上した話
yug1224
4
340
さぁV100、メモリをお食べ・・・
nilpe
0
160
Contextとはなにか
chiroruxx
1
380
The NotImplementedError Problem in Ruby
koic
1
950
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
970
Vite+ Unified Toolchain for the Web
naokihaba
0
360
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
8.3k
Performance Engineering for Everyone
elenatanasoiu
0
230
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
130
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
600
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
270
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
210k
Marketing to machines
jonoalderson
1
5.5k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
GitHub's CSS Performance
jonrohan
1033
470k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
The SEO identity crisis: Don't let AI make you average
varn
0
500
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
Fireside Chat
paigeccino
42
4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
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