KeyCloak

KeycloakとSpring Bootによるセキュアアプリ開発ガイド

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

KeycloakとSpring Bootの連携によるセキュアアプリ構築の概要

Keycloakを活用した認証・認可は、現代のWebアプリケーション開発において不可欠な技術です。OIDC(OpenID Connect)との統合により、標準化された認証フローとセキュリティの強化が可能になります。本記事では、2023年時点での最新情報を基に、Spring BootアプリケーションにおけるKeycloak連携を具体的なコード例とともに解説します。実務導入時の参考となる情報を提供し、信頼性のあるセキュアなWebアプリ構築を目指します。


Keycloakサーバーのインストールと初期設定

KeycloakはSpring Bootとの連携に不可欠な認証プロバイダーです。公式Dockerイメージを用いることで手軽に環境構築が可能です。管理者アカウントやRealmの作成など、開発フローにおける重要な初期ステップについて解説します。

Dockerを使用したKeycloakの起動手順

以下にKeycloakのDockerでの起動手順を示します。

  1. Dockerイメージの取得
    bash
    docker pull quay.io/keycloak/keycloak:latest

  2. コンテナの起動
    bash
    docker run -d --name keycloak \
    -p 8080:8080 \
    -e KEYCLOAK_ADMIN=admin \
    -e KEYCLOAK_ADMIN_PASSWORD=admin \
    quay.io/keycloak/keycloak:latest

  3. ブラウザでアクセス
    http://localhost:8080 を開き、Keycloakの管理画面にログインします。

注意: ポート 8080 はKeycloakのデフォルトですが、既存のサービスと競合する可能性があります。必要に応じて -p 8081:8080 のように変更してください。


管理者アカウントの作成とRealm設定

管理者アカウントはKeycloakの初期設定で必須です。また、Realm(ドメイン)をアプリケーションごとに分離管理することで、セキュリティと運用効率が向上します。

  1. 管理者アカウントの作成
  2. 管理画面から「Add Realm」を選択し、「myrealm」といった名前で新規Realmを作成します。

  3. クライアントの準備

  4. 「Clients」セクションからクライアントを作成し、アプリケーションとの連携用にクライアントIDとシークレットを取得します。

  5. 役割の設定(オプション)

  6. 「Roles」セクションでユーザーに割り当てるロールを定義しておくと、RBAC実装時に便利です。

Spring BootアプリケーションへのKeycloakクライアント登録

Spring Bootプロジェクトでは、Keycloakとの連携のためにクライアント情報を設定します。この手順は、アプリケーションがKeycloakサーバーにアクセスできるようにするために不可欠です。

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

  1. 管理画面にアクセス
    http://localhost:8080/admin へログインし、「Clients」セクションを開きます。

  2. 新規クライアントの作成

  3. 「Create」ボタンをクリックし、クライアントID(例:springboot-app)とシークレットを生成します。

  4. Redirect URIの設定

  5. クライアントにアクセスするアプリケーションのURL(例:http://localhost:8081/realms/myrealm/protocol/openid-connect/auth)を指定します。

  6. スコープの選択

  7. 必要なスコープ(OpenID、profileなど)を選択し、保存します。

注意: Redirect URIにWildcard(*)を付けると、サブパスも許可されますが、リダイレクト攻撃のリスクがあります。信頼できるドメインのみ指定してください。


application.propertiesでの認証設定ファイル構成

Spring BootアプリケーションでKeycloakを有効化するために、application.propertiesにOIDCプロバイダー情報を記述します。

OIDCプロバイダーコンフィギュレーション

以下は、Keycloak認証設定の基本例です:

ポイント: client-secretはKeycloakから取得したものを必ず使用し、アプリケーション外で安全に管理してください。


Spring Security設定の改善とコード例

Spring Boot 3.x以降では、WebSecurityConfigurerAdapterは非推奨となっています。代わりにSecurityFilterChainを直接定義する方法が推奨されます。

セキュリティ設定のサンプルコード(Spring Boot 3.x対応)

注意: すべてのリクエストを認証する設定は、開発環境でのみ使用してください。実運用では必要なエンドポイントのみ認証します。


RBAC(Role-Based Access Control)の実装方法

RBACにより、ユーザーが持つ役割に基づいてアクセスを制限できます。Keycloakで定義したロールをSpring Securityとマッピングする手順を説明します。

KeycloakロールとSpring Securityのマッピング

以下は、Role-Based Access Controlの実装例です:

ポイント: hasRole("ADMIN")は、Keycloakで定義した「admin」ロールを参照します。


JWTトークンによるAPIセキュリティの具体例

JWT(JSON Web Token)は、信頼性のある認証手段として広く利用されています。Spring Bootアプリケーションでは、JWTトークンを用いたアクセス制限が可能です。

トークン検証ロジックの実装

Keycloakから取得したトークンを検証するためには、JwtAuthenticationConverterクラスを使用します。以下に設定例を示します:


クライアントシークレットとトークンの管理ベストプラクティス

セキュリティの観点から、以下のような管理方法が推奨されます:

  • クライアントシークレット:
  • 環境変数やSecrets Manager(AWS Secrets Managerなど)に保存し、コード内に硬编码しない。
  • テスト環境では@TestPropertySourceで別途設定ファイルを読み込む。

  • トークンの管理:

  • クライアントシークレットは短期間で有効期限が切れるように設定する(Keycloakで設定可能)。
  • JWTトークンはHTTPヘッダーにAuthorization: Bearer <token>形式で送信し、HTTPSによる暗号化を必ず行う。

リダイレクトURIのセキュリティリスクと回避策

リダイレクトURIにWildcard(*)を使用すると、任意のサブパスが許可されるため、以下のリスクがあります:

リスク 説明
リダイレクト攻撃 恶意のあるURLにリダイレクトされる可能性がある。
信頼性の低下 不正なサブパスが許可され、アプリケーションに影響を与える可能性がある。

回避策:

  • リダイレクトURIは具体的なURL(例:http://localhost:8081/callback)を指定し、Wildcard使用を控える。
  • Keycloak側で「Valid Redirect URIs」の設定を厳密に管理する。

まとめ

本記事では、2023年時点での最新情報に基づき、KeycloakとSpring Bootを連携させるための手順をご説明しました。具体的には以下の点を解説しました:

  • Keycloakサーバーのインストールと初期設定方法
  • Spring Bootアプリケーションでのクライアント登録手順
  • application.propertiesの認証設定ファイル構成例
  • RBACによるアクセス制限の実装方法
  • JWTトークンを使用したAPIセキュリティの具体例

Keycloakを活用することで、セキュアなWebアプリケーション構築が可能になります。本記事の手順に従って、自分のプロジェクトでも導入試行してみてください。


スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-KeyCloak