PR:この記事にはアフィリエイトリンクが含まれます。
Spring Boot 3でREST APIを作るなら、認証は後付けしづらい部分です。利用者を見分ける認証と操作を許可する認可を分けて考えると、設定もテストも見通しやすくなります。
JWTを採用しただけで安全になるわけではありません。有効期限や権限の範囲に加え、鍵の更新とブラウザーでの送信方法を決めてから各APIを保護します。
| 書籍 | 扱う範囲 | 実務で役立つ場面 |
|---|---|---|
Spring Boot 3 プログラミング入門 | Boot 3、DB、JAX-RSによるREST API | 日本語で開発の基礎をつかむ |
Modern API Development with Spring 6 and Spring Boot 3: Design scalable, viable, and reactive APIs with REST, gRPC, and GraphQL using Java 17 and Spring Boot 3 | REST、gRPC、GraphQL、JWT、テスト | API設計と認証をまとめて学ぶ |
Spring Security in Action, Second Edition | 認証・認可、OAuth 2、OpenID Connect、テスト | Spring Securityを深く学ぶ |
「Spring Boot 3 プログラミング入門」は希望小売価格3,300円(税込)です。実売価格は時期や販売店で変わります。内容の範囲もあわせて見ておきたいですね。
認証の土台
spring-boot-starter-securityを追加すると、Spring Securityの標準設定が有効になり、未認証リクエストは保護されます。とはいえ起動時の状態を本番設定とみなさず、公開するルートを明示してください。
認証は利用者やサービスの身元を確かめ、認可はその主体に操作を許可します。ログインに成功した利用者へ全APIの権限を渡す設計では、閲覧範囲を制御できません。
パスワードは平文や単純なハッシュ値で保存せず、Spring SecurityのPasswordEncoderを使います。BCryptなど計算コストを調整できる方式を選び、登録時とログイン時に同じ規則で検証してください。
APIを呼ぶ主体も早めに整理しましょう。自社のWeb画面から呼ぶか、スマホアプリや別の業務サービスから呼ぶかで、トークンの渡し方と失効要件は変わります。同じ設定を一律に当てはめると、あとで運用に手間がかかります。
JWTと鍵管理
JWTには有効期限と発行者、対象者やスコープなどを含めます。APIは署名に加えて発行者と有効期間を確認し、audienceも検証します。
Spring Bootでissuer-uriを設定すると、認可サーバーの情報を基に公開鍵を取得できます。鍵をアプリに固定で埋め込む手間を減らし、複数APIで検証に使う鍵の入れ替えにも追従しやすくなります。
署名が正しくても、権限が広すぎれば安全とはいえません。トークンに含めるscopeは必要分に絞り、認可に不要な住所やメールアドレスを載せないことで、漏えい時に見える情報を抑えられます。
JWTはサーバー側に状態を持たず検証できる半面、発行後にすぐ失効させにくい方式です。アクセストークンは短い期限に設定し、更新用トークンの保管と失効は認可サーバーに任せて漏えい時の影響を抑えます。
権限と応答
URL単位の認可にはrequestMatchersを使い、公開APIとログイン必須API、管理者向けAPIを区別します。Resource ServerではscopeがSCOPE_付きの権限になるため、設定名をトークンのscopeに合わせてください。
データの所有者を確認する処理は、URLルールだけでは守りきれません。@EnableMethodSecurityを有効にし、サービスメソッドに@PreAuthorizeを付けて本人や担当部署を確認すれば、別経路からの呼び出しにも認可が適用されます。
認証情報がないか無効なら401、認証済みで権限が不足する場合は403です。この違いをAPI仕様に反映し、エラー本文から内部クラス名やトークン検証の詳細を外します。
ログイン失敗を細かく説明すると、登録済み利用者かどうかを推測されるおそれがあります。画面には共通エラーを返し、調査用の詳細はアクセス制限したサーバーログに残すと両立しやすくなります。
ブラウザー境界
CORSはブラウザーが別オリジンへのリクエストを許すか決める仕組みです。認証の代わりではありません。許可するオリジンは必要なフロントエンドに絞り、APIの認可範囲は別のルールで管理しましょう。
Cookieで認証する場合、ブラウザーがリクエストへCookieを自動添付するため、CSRF対策が必要です。SameSite属性だけに頼らず、Spring SecurityのCSRFトークンを使う流れも確認してください。Cookie認証では見逃せない点ですね。
AuthorizationヘッダーでBearerトークンを明示して送るAPIでは、Cookie認証とはCSRFの条件が異なります。ただし、トークンをCookieへ移せば前提も変わります。保存場所と送信方法を一組で設計しましょう。
資格情報を含むリクエストを許可するなら、オリジンを限定します。ワイルドカードのままにせずフロントエンドのURLを指定し、認証情報が意図した場所から届く状態にしましょう。
テストと運用
認証設定のテストでは正常系だけでは足りません。未認証、権限不足、必要なscopeを持つ利用者で同じエンドポイントを呼び、401と403の境目を確かめます。拒否されるべきリクエストが通らないことも大切です。
MockMvcを使うなら、Spring Securityのテスト支援で認証済みユーザーやJWTを設定できます。スタブJWTで認可ルールを確かめるテストと、発行者や署名検証の設定を確認するテストは目的が異なります。この二つを分けると結果を読み取りやすくなります。
本番ログには認証失敗や権限拒否を記録し、調査に使えるリクエストIDを付けます。パスワードやAuthorizationヘッダー、更新用トークンはログに記録しません。監査には主体IDと操作名など、必要な項目を選んで残してください。
認証まわりの変更は、鍵の切り替えや期限切れへの対応まで運用手順に含めます。開発環境で通るだけでは不十分です。鍵を取得できない障害時にもAPIが安全に失敗するか、公開前に確かめましょう。
書籍で補う
「Spring Boot 3 プログラミング入門」はSpring Boot 3、Spring Framework 6、JDK 17をハンズオン形式で学べる日本語の入門書です。インストールからDB連携へ進み、JAX-RSのREST APIとReactアプリの連携も扱います。認証実装の前にBoot 3開発とDBの基本を学ぶ目的に合います。
Packtの「Modern API Development with Spring 6 and Spring Boot 3」は英語の第2版で494ページです。RESTとgRPC、GraphQLに加えてAPI仕様、Repository・Service構成、テストを扱います。Spring SecurityとJWTによるAPI保護、CORS・CSRF、セキュリティテストも対象です。

Modern API Development with Spring 6 and Spring Boot 3: Design scalable, viable, and reactive APIs with REST, gRPC, and GraphQL using Java 17 and Spring Boot 3
Packt
Amazonで見る「Spring Security in Action, Second Edition」は英語の440ページで、Spring Boot 3向けに更新された専門書です。ユーザーとパスワードに加えて、エンドポイント単位・メソッド単位の認可も解説します。OAuth 2やOpenID Connect、CORS・CSRF、セキュリティ設定のテストも扱います。
結論
REST API認証を主題に一冊買うなら、「Spring Security in Action, Second Edition」を最初に選んでください。Boot 3向けの専門書で、OAuth 2とOpenID Connect、認可とテストまで学べます。
英語の専門書に進む前にBoot 3やDBの基本を固めたい人には、「Spring Boot 3 プログラミング入門」がおすすめです。認証専門書ではありませんが、Boot 3とDB、REST API開発の基本を学べます。
API設計とREST、gRPC、GraphQLをまとめて学ぶなら、Packtの第2版がおすすめです。認証方式と権限をAPIごとに定め、鍵の運用やテストまで実装に反映してください。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。



