KeyCloak

KeycloakとSpring Bootの統合ガイド | ステップバイステップ解説

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Keycloakサーバーのインストールと基本設定

KeycloakサーバーはDockerで簡単に導入可能ですが、バージョン管理に注意が必要です。以下に安定したバージョンでの起動手順を示します。

Dockerでの起動手順

Keycloakは公式イメージを使用して素早く導入可能です。以下のコマンドでコンテナを立ち上げます。バージョンを固定するため、latestではなく特定のバージョン(例: 20.0.6)を指定します。

実行後、ブラウザで http://localhost:8080/auth にアクセスし、管理者アカウントを作成してください。


管理者アカウントの作成

Keycloak管理画面にログイン後、以下の手順で管理者アカウントを設定します。

  1. 「Add User」ボタンをクリック
  2. ユーザーID(例: admin)とパスワードを入力
  3. 「View Password」オプションを有効化し、認証方法を指定

管理者アカウントはクライアントアプリケーションの設定に必要です。


クライアントアプリケーションの登録

Spring BootアプリケーションをKeycloakと連携させるには、クライアントとして登録が必要です。

  1. 「Clients」タブ → 「Create」
  2. 実装するSpring Bootアプリケーション名(例: springboot-app)を指定
  3. Client ID は自動生成されるため、変更不要
  4. Access Typeconfidential に設定し、Valid Redirect URIshttp://localhost:8080/* を入力

登録後、「Credentials」タブからクライアントシークレットを取得してください。このシークレットは後ほどapplication.propertiesに記述します。


Spring Bootプロジェクトへの依存関係追加

Spring Bootアプリケーションには、Spring SecurityKeycloak Spring Boot Starterの2つのライブラリが必要です。

Spring Securityの導入

Spring Securityは認証・認可を実現するための核となるフレームワークです。以下にbuild.gradlepom.xmlへの記述例を示します。

Gradle(build.gradle)

Maven(pom.xml)

Spring Securityを導入することで、リソースへのアクセス制限やセッション管理が可能になります。


Keycloak Spring Boot Starterの設定

Keycloakとの連携には専用ライブラリが必要です。以下に追加方法を示します。

注意: Keycloak Spring Boot Starterのバージョンは、Keycloakサーバーのバージョンと互換性を持たせる必要があります。以下の表を参考にしてください。


OAuth2/OIDC認証フローの構築

OAuth2/OIDCを用いた認証フローでは、セキュアなエンドポイントとトークンベースの認可処理を実装します。

セキュアなエンドポイントの作成

以下の手順で保護されたリソースを作成します。

  1. @RestControllerアノテーションを付与したクラスを作成
  2. hasRole('USER')のロールマッピングについて: Keycloakに登録したユーザーのロール(例: user)は、Spring Securityで自動的にROLE_userとして扱われます。そのため、@PreAuthorize("hasRole('USER')")はKeycloakのロール名と一致させる必要があります。

このエンドポイントには、Keycloak経由で認証されたユーザーのみがアクセスできます。


トークンベースの認可処理

Spring SecurityはOAuth2トークンを自動解析して認証情報を取得します。以下に基本的な設定例を示します。

この設定により、/secure/**以下のパスにアクセスする際には、Keycloakによる認証が強制されます。


application.propertiesの記述例

Spring Bootアプリケーションでは、Keycloakサーバーへの接続情報をapplication.propertiesファイルに記述します。

Keycloakサーバー接続設定

以下のように、KeycloakサーバーのURLとリールムを指定します。リールム名は具体的な例(例: springboot-realm)を記載してください。


クライアントID・シークレットの指定

前項で登録したクライアントアプリケーション情報を以下に記述します。

注意: your-client-secretは、Keycloak管理画面から取得したクライアントシークレットを入力してください。


認証失敗時のカスタムハンドリング

Keycloakとの認証が失敗した場合に、エラーレスポンスのカスタマイズやロギング処理を行う方法です。

エラーレスポンスのカスタマイズ

認証失敗時のレスポンスをカスタマイズするには、OAuth2ExceptionTranslatorを実装します。以下に、基本的な例外処理例と拡張例を示します。

このようにして、ユーザーが理解しやすいエラーメッセージを返却できます。

ロギング処理の実装

認証失敗時の状況を把握するためには、ロギング処理を実装するのが有効です。

この処理により、セキュリティ上の問題を迅速に切り分けられるようになります。


まとめ

本記事では、KeycloakとSpring Bootの統合手順をステップバイステップで解説しました。重要なポイントを以下に整理します:

  • KeycloakサーバーはDockerでの導入が推奨され、バージョン固定が必要
  • Spring SecurityとKeycloak Starterを使用することで認証フローが構築可能
  • application.propertiesにはリールム名やクライアントシークレットを明示的に記述
  • 認証失敗時の処理はカスタマイズし、セキュリティの強化を図る

記事内のサンプルコードを参考に、すぐにKeycloakとSpring Bootの統合を試してみましょう。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-KeyCloak