KeyCloak

Keycloak OIDCでSpring Boot 3をセキュアに構築する方法

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

Keycloak OIDC設定でSpring Boot 3環境をセキュアに構築する意義

Keycloak OIDC設定は、Java開発者にとってSSO(シングルサインオン)の実装において不可欠な技術です。特にSpring Boot 3とSecurity 6の組み合わせでは、従来からある認証・認可フレームワークを現代的なセキュリティ基準に適合させることが求められます。OIDC(OpenID Connect)はOAuth 2.0に基づく標準プロトコルで、ユーザー情報の検証とセッション管理を提供します。この記事では、Keycloak OIDCクライアントの設定手順をステップバイステップで解説し、Spring Boot 3との統合方法も具体的に紹介します。


Keycloak管理者画面でのクライアント登録手順

Spring BootアプリケーションがKeycloakと連携するためには、まずKeycloakの管理コンソールでクライアントを登録する必要があります。このプロセスは後続の認証フローの基盤となる重要なステップです。

管理コンソールアクセス

Keycloakサーバーに接続し、管理者としてログインします。以下のような手順で操作を行います。

  1. KeycloakサーバーのURL(例:http://localhost:8080/auth/admin/realms/realm-name)にアクセスします。
  2. ログイン後、クライアント(Clients)タブを選択し、新しいクライアントを追加します。

新規クライアント作成

以下の設定を行います。

  • クライアントID:任意の名前を入力(例:spring-boot-app)。このIDは後でSpring Bootアプリケーションに設定します。
  • クライアントタイプ公開クライアント(public) または 機密クライアント(confidential) を選択。Webアプリケーションでは通常「機密クライアント」を推奨します。

リダイレクトURI設定

Spring Bootアプリケーションの認証コールバック先URLを入力します。

  • リダイレクトURIhttp://localhost:8080/login/oauth2/code/keycloakなどの形式で記載します。
  • 複数のURIが必要な場合は、カンマで区切って記載します。

注意:リダイレクトURIはSpring Bootアプリケーションの実際のルートに一致させる必要があります。不一致の場合、認証フローが正しく動作しません。


PKCE認証フローの有効化と構成

PKCE(Proof Key for Code Exchange)は、公開クライアント向けのセキュリティ強化仕様で、OAuth 2.0のコードフローにおけるリスクを軽減します。特にWebフロントエンドアプリケーションでは必須となる技術です。

PKCEオプションの確認

Keycloak管理コンソールのクライアント設定ページへ移動し、以下を行います。

  1. OAuth 2.0 タブを開き、PKCE(Proof Key for Code Exchange) チェックボックスをONにします。
  2. フロー種類としてAuthorization Code with PKCEを選択します。

クライアントセキュリティ設定変更

以下のように設定します。

項目 補足
フロー種類 Authorization Code with PKCE クライアントシークレット不要、セキュリティ高めの選択肢
PKCE有効化 ON 任意の公開クライアントに適用可能

重要ポイント:PKCEはOAuth 2.0コードフローにおいてリプレイ攻撃を防ぐために設計されており、特にフロントエンドアプリケーションで必須です。


Client ID/Secretの生成と管理方法

KeycloakではクライアントIDとシークレットが自動生成されるため、開発者はそれをSpring Bootアプリに適切に導入する必要があります。シークレットの安全な管理はセキュリティ設計の根幹です。

クライアントシークレット生成

Keycloak管理コンソールのクライアント設定ページで以下の手順を実行します。

  1. クライアントシークレット(Client Secret)フィールドに「Generate」をクリックし、自動生成された文字列を取得します。
  2. シークレットはセキュリティ管理ツールを使用して保存・管理することを推奨します。

環境ごとのセキュリティ対策

以下のように環境に応じた設定を行います。

  • 開発環境:シークレットはapplication.propertiesや環境変数で管理。例:
    properties
    spring.security.oauth2.client.registration.keycloak.client-secret=your-generated-secret

  • 本番環境:Secret Managementツール(HashiCorp Vault、AWS Secrets Manager、Azure Key Vaultなど)を使用し、コードに直接シークレットを埋め込まない。

セキュリティの注意点:クライアントシークレットは絶対に公開しないようにしてください。Gitレポジトリやログに記録しないことが重要です。


OIDC認証フロー選定の考え方

OIDCにはいくつかの認証フローがありますが、セキュリティを重視する場合はAuthorization Code with PKCEが最適です。特にSpring Security 6ではこのフローとの互換性が高く、現代的な開発に合致します。

フロー種類比較

以下はOIDC認証フローの特徴と使用シーンを比較した表です。

フロー セキュリティ 使用シーン Spring Boot対応
Authorization Code with PKCE Webフロントエンド、モバイルアプリなど公開クライアント ✅ Spring Security 6 対応
Implicit Flow 単純なリダイレクトが必要なケース(非推奨) ❌ Spring Security 6 不対応
Hybrid Flow クライアントシークレットが必要なシナリオ ✅ Spring Security 6 対応

Spring Security 6対応設定

Spring Boot 3ではSecurity 6が採用され、OIDCフローのサポートが強化されています。以下の依存関係をbuild.gradleまたはpom.xmlに追加してください。


Spring Boot 3でのKeycloak統合サンプルコード

ここでは、Spring Boot 3とSecurity 6を使用したKeycloakの統合方法をステップバイステップで解説します。

依存関係設定

build.gradle.ktsに以下を追加:

セキュリティ構成クラス(SecurityFilterChainを使用)

SecurityConfig.ktを作成し、Keycloakとの統合を設定します。

認証成功時の処理(OAuth2SuccessHandlerのカスタマイズ)

認証が成功した場合、ユーザー情報をセッションに保存します。OAuth2SuccessHandlerをカスタマイズすることで、任意のロジックを追加できます。


まとめ

Keycloak OIDC設定を通じたSpring Boot 3環境構築は、現代的なSSO実装に不可欠です。クライアント登録からPKCE有効化、シークレット管理までを丁寧に理解することで、セキュリティリスクが大幅に低減されます。また、Spring Security 6との組み合わせにより、より信頼性の高い認証フローを構築可能です。


スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-KeyCloak