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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Wagyu
June 01, 2026
Programming
280
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
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
190
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
210
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
150
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.6k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
act1-costs.pdf
sumedhbala
0
160
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
継続モナドとリアクティブプログラミング
yukikurage
1
230
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
8
820
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Navigating Team Friction
lara
192
16k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
How GitHub (no longer) Works
holman
316
150k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
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