Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for Wagyu Wagyu
June 01, 2026

Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ

Avatar for Wagyu

Wagyu

June 01, 2026

Other Decks in Programming

Transcript

  1. 1. なぜGraphQLなのか 2. 認証‧認可の基礎 3. 認証‧認可 全体の流れ 4. 認証処理の実装 5.

    認可処理の実装(RBACとABAC) 6. まとめ アジェンダ 3 #jjug_ccc #jjug_ccc_m
  2. • RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス構造を定義

    クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要がある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 5 VS #jjug_ccc #jjug_ccc_m
  3. • RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス

    構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 6 #jjug #jjug_ccc GraphQL = 柔軟性が⾼い 6 #jjug_ccc #jjug_ccc_m
  4. • RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス

    構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 10 #jjug #jjug_ccc 「取得できる」 != 「⾒えてよい」 10 #jjug_ccc #jjug_ccc_m
  5. • RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス

    構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 17 #jjug #jjug_ccc     JWTの読み⽅は    ”ジョット”らしい 17 #jjug_ccc #jjug_ccc_m
  6. 26 • ロールベースアクセス制御(Role-Based Access Control) ◦ ロールに基づいてアクセス制御を⾏う • 属性ベースアクセス制御(Attribute-Based Access

    Control) ◦ 属性やコンテキストに基づいてアクセス制御を⾏う 5. 認可処理の実装(RBACとABAC) 26 #jjug_ccc #jjug_ccc_m
  7. 27 • JWTを使ったRBAC ◦ JWTからロール情報を安全に復元 ▪ roles を GrantedAuthority へ変換

    ▪ Spring Securityの認可で利⽤ 5. 認可処理の実装(RBACとABAC)
  8. • RESTとGraphQLの認可モデルの⽐較 ⽐較項⽬ REST GraphQL 認可の単位 エンドポイント単位 フィールド単位 データ取得⽅式 サーバサイドでレスポンス

    構造を定義 クライアントが選択可能 権限ごとの レスポンス制御 APIやDTOを分ける必要が ある 同⼀クエリでレスポンスを切り替えられる 1. なぜGraphQLなのか 30 #jjug #jjug_ccc   N+1問題やパフォーマンス の低下には注意! 30 #jjug_ccc #jjug_ccc_m
  9. 5. 認可処理の実装(RBACとABAC) • RBACとABACの使い分け ◦ RBAC ▪ 役割ごとの境界線が明確な場合 ▪ シンプルな権限制御向け

    ◦ ABAC ▪ 役割以外の要因で制御したい場合 ▪ 柔軟な条件制御向け 32 #jjug_ccc #jjug_ccc_m
  10. • 認証と認可は別の処理として実装する ◦ 認証:ユーザーを特定し、JWTを発⾏ ◦ 認可:JWTの情報を元にアクセス可否を判断 • JWTは認可に必要な情報を持つ ◦ roles

    → RBACで利⽤ ◦ attributes(department, location など)→ ABACで利⽤ • Spring Securityにより、 JWTの検証とAuthentication⽣成は⾃動化される 6. まとめ 35 #jjug_ccc #jjug_ccc_m