Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Wagyu
June 01, 2026
Programming
360
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
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
100
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
180
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
520
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
110
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
How STYLIGHT went responsive
nonsquared
100
6.3k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
Being A Developer After 40
akosma
92
590k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
830
Navigating Team Friction
lara
192
16k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Exploring anti-patterns in Rails
aemeredith
4
540
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
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