KeyCloak

Keycloak OIDC Custom Claims Setup Guide for Java Developers

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

Keycloak OIDC カスタムクレーム設定方法の実践ガイド

KeycloakでOIDC経由のカスタムクレームを正しく設定するには、トークン発行フローに即した構成が不可欠です。本記事では、Java開発者やDevOpsエンジニア向けに、Realm設定からSpring Securityでの実装までの一連の手順とコードサンプルを解説します。OIDCプロトコルの理解と具体的な構成例を通じて、実環境での課題に対応する方法をご案内します。


Keycloakでカスタムクレームを定義する前に知っておくべきOIDCの基礎

OIDC(OpenID Connect)はOAuth 2.0プロトコルに基づく認証フレームワークで、ユーザーに関する情報を「claim」としてトークンに埋め込む仕組みが特徴です。カスタムクレームが必要になるのは、標準的なclaim(例:sub, email)では表現できないユースケースを想定するためです。

OIDCプロトコルにおけるclaimの役割と種類

項目 説明
標準Claim OIDC仕様で定義されたもの(例:iss, exp, name)。常にトークンに含まれる。
カスタムClaim システム固有の情報を追加するための拡張機能。開発者による自由な定義が可能。

標準的なclaimは認証フローで必要不可欠ですが、企業独自の属性(例:所属部署、社員番号)をアプリケーションに渡すにはカスタムクレームが有効です。


Keycloak Realm設定でカスタムアトリビュートを追加する手順

Keycloakでカスタムクレームを活用するには、ユーザー属性の定義とRealmレベルでの構成が必要です。以下にステップバイステップの操作方法を解説します。

Realm設定画面へのアクセス方法

  1. Keycloak管理画面(例:http://localhost:8080/auth/admin/realms)を開き、対象のRealmを選択。
  2. 「Users」「User Attributes」 からカスタムフィールドを追加する。

ユーザー属性のカスタムフィールド作成プロセス

  • 1. 新規アトリビュートの登録
  • 名前(Name):custom_department
  • 値(Value):所属部署名(例:Engineering
  • データ型(Data Type):String
  • 2. 必須項目設定(任意)
  • 「Required」にチェックを付けると、ユーザー登録時に入力が必須になる。

注意: カスタムアトリビュートはロールベースで制限でき、セキュリティポリシーに応じてアクセス権を細分化できます。


トークン生成時のJSON Web Token構造とカスタムクレーム埋め込み

JWT(JSON Web Token)にはヘッダー、ペイロード、署名の3つのセクションが存在します。カスタムクレームはペイロードに格納され、アプリケーション側で解析されます。

JWTペイロードの構成要素

セクション 説明
iss イシュアー(Keycloak)
sub ユーザーID(subject
custom_department カスタムアトリビュートの値がここに記録される

カスタムクレームのフィールド名規約

  • スネークケースを推奨(例:custom_department
  • OIDC標準claimと重複しないようにする
  • リフレッシュトークンにはカスタムクレームは含まれない点に注意

実際のトークン例:


Spring Securityでのカスタムクレーム取得処理サンプル

Spring Securityでカスタムクレームを抽出するには、OAuth2ResourceServerの設定とクレーム解析ロジックが必要です。

OAuth2ResourceServerの設定(application.yml)

カスタム属性のパースロジック(Javaコード)

注意: JwtクラスはSpring Securityのorg.springframework.security.oauth2.jwt.Jwtをインポートする必要があります。
初心者向け解説: Jwtクラスを使用する際は、import org.springframework.security.oauth2.jwt.Jwt;を忘れず記述してください。


実環境での検証フローとトラブルシューティングポイント

カスタムクレームが正しく動作しない場合は、以下の手順でデバッグします。

トークン発行時のログ確認手順

  1. Keycloakのログ設定DEBUGレベルに変更し、トークン生成プロセスを観察。
  2. Spring SecurityのログからJWT解析エラーの有無をチェック。

クレームが反映されないケースの原因分析

原因 対処法
フィールド名ミス カスタムアトリビュートの名称と一致するか確認
トークンタイプの不一致 アクセストークンにのみカスタムクレームが含まれる
Spring Securityの設定漏れ Jwtクラスで正しく取得しているか再確認

Keycloak管理画面でのカスタムクレーム設定実践ガイド

ここまでの手順を踏まえ、実際にKeycloak管理画面でカスタムクレームをテストしてみましょう。

テストユーザー作成とアトリビュート値の確認

  1. 「Users」「Create User」 をクリック。
  2. 「User Attributes」 セクションに custom_department に値を入力し、保存。

ユースケース例: 部署別アクセス制限が必要なアプリケーションでは、custom_departmentの値に基づいて権限処理を行う。

トークン発行APIの呼び出し方法

  1. アクセストークンを取得するためのAPIコール(例:curl)
    bash
    curl -X POST http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "grant_type=password" \
    -d "client_id=your-client-id" \
    -d "username=testuser" \
    -d "password=secret"

  2. レスポンス内のaccess_tokenを解析し、カスタムクレームが含まれているか確認。

Keycloak管理画面での設定は一見単純ですが、実際のアプリケーションとの連携には細かな手順が必要です。今回の手順をもとに、自社環境で検証してみてください。


Spring Security 5.x以降でのJwt API対応と互換性確保

Spring Security 5.3以降では、OAuth2AuthenticationTokenからJwt型の取得が推奨されています。以下に互換性を考慮したコード例を示します。

複数バージョン対応設定(application.yml)

バージョン別対応コード(Java)

Spring Security 5.3+

Spring Security 5.1〜5.2

注意: Spring Security 5.x以降では、getClaimAsString()メソッドが非推奨となる場合があります。代わりにJwt.getClaims()を使用し、型変換を行う必要があります。


Keycloakバージョンの影響と対応策

Keycloak v21.0以降で導入されたUser Attributeclaim設定オプションにより、カスタムアトリビュートを自動的にJWTペイロードに追加できるようになりました。

Keycloakバージョン別の変更点

バージョン 設定方法 互換性注意点
v21.0+ User AttributesClaim設定 カスタムアトリビュートが自動的にトークンに含まれる
v20.0以下 手動でJWT構造をカスタマイズ必要 リアルタイム反映に時間がかかる

実装例: Keycloak v21.0以降では、custom_departmentを「Claim」セクションに登録することで、トークンへの自動挿入が可能になります。


まとめと今後の課題

本記事では、Keycloakでのカスタムクレームの設定手順やSpring Securityとの連携方法について解説しました。実装上は、ユーザー属性の正しい定義コード側での適切な解析処理が重要です。

今後の課題として、以下のようなケースに該当する場合は、さらなる検証が必要です:

  • リアルタイムで変更されたカスタムクレームが即座に反映されるか。
  • 複数のRealm間でのカスタムクレームの一貫性管理。

これらの点を踏まえ、自社環境に最適な構成をご検討ください。

スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-KeyCloak