コピーすることによって、Keycloakへデプロイすることができ、アーカイブとしてデプロイすることも可能です。使用を検討した方がいいかもしれません。使用すると、テーマのコピー版の作成が簡単になります。クラスター構成のKeycloakなど、インスタンスが複数ある場合は特に便利です。手順テーマをアーカイブとして配備するには、テーマのリソースを含むJARアーカイブを作成します。いうファイルを追加し、アーカイブ内で利用可能なテーマと、それぞれのテーマがどのようなタイプを提供するかをリストアップします。内容は、以下のとおりです。1つのアーカイブには複数のテーマを含めることができ、各テーマは1つ以上のタイプをサポートすることができます。ディレクトリーにアーカイブを追加し、サーバーが既に起動している場合は再起動します。テーマセレクターデフォルトでは、クライアントがログインテーマを上書きできる点を除き、レルムに設定されたテーマが使用されます。この動作は、テーマセレクターSPIによって変更できます。これは、ユーザー・エージェント・ヘッダーを見ることにより、たとえばデスクトップおよびモバイルデバイス用の異なるテーマを選択するために使用することができます。実装する必要があります。追加のリソースカスタム・プロバイダーを作成してデプロイする方法の詳細については、サービス・プロバイダー・インターフェイスの手順に従ってください。テーマリソースKeycloakにカスタム・プロバイダーを実装する場合、テンプレート、リソースおよびメッセージバンドルを追加する必要がよくあります。ユースケースの例は、追加のテンプレートとリソースを必要とするカスタム・オーセンティケーターです。入れたJARを作成することです。テンプレートとリソースをより柔軟にロードする方法が必要な場合、ThemeResourceSPIを使用して実現できます。実装することで、テンプレートとリソースを読み込む方法を直に決めることができます。追加のリソースカスタム・プロバイダーを作成してデプロイする方法の詳細については、サービス・プロバイダー・インターフェイスの手順に従ってください。使用して選択されます。国際化が無効の場合は、英語がデフォルトの言語です。説明されているロジックに従って解決されます。通して変更することができます。使用して選択されます。国際化が無効の場合は、英語がデフォルトの言語です。説明されているロジックに従って解決されます。通して変更することができます。いう単一のメソッドを持ちます。与えられたロケールを返さなければなりません。メソッドから利用できます。継承することができます。オーバーライドし、そしてnull値を返すことができます。結果として、ロケールの選択はレルムのデフォルト言語に戻ります。追加のリソースカスタム・プロバイダーを作成してデプロイする方法の詳細については、サービス・プロバイダー・インターフェイスの手順に従ってください。登録ページとアカウント管理コンソールに、カスタムテーマでカスタムユーザー属性を追加することができます。追加のリソースカスタムテーマの作成方法については、Themesを参照してください。登録ページこの手順で、登録ページにカスタム属性を追加します。テンプレートを、カスタムテーマのログインタイプにコピーしてください。エディターでコピーを開きます。登録ページに携帯電話番号を追加するには、次のスニペットをフォームに追加します。始まっていることを確認してください。いう名前で保存されます。変更を参照するには、レルムがログインテーマにカスタムテーマを使用していることを確認し、登録ページを開きます。アカウント管理コンソールアカウント管理コンソールのユーザー・プロフィールのページでカスタム属性を管理するには、次の手順を実施します。テンプレートをカスタムテーマのアカウントタイプにコピーします。エディターでコピーを開きます。携帯電話番号をアカウントページに追加する例として、次のスニペットをフォームに追加します。始まっていることを確認してください。変更を参照するには、レルムがアカウントテーマに対してカスタムテーマを使用していることを確認し、アカウント管理コンソールでユーザー・プロフィールのページを開いてください。アイデンティティー・ブローカリングAPIKeycloakは、親IDPに認証を委譲してログインすることができます。典型的な例としては、FacebookやGoogleなどのソーシャル・プロバイダーを経由してユーザーにログインできるようにしたい場合です。既存のアカウントを仲介されたIDPにリンクすることも可能です。このセクションでは、アイデンティティー・ブローカリングに関連してアプリケーションが使用できるいくつかのAPIについて説明します。外部IDPトークンの取得Keycloakは、外部IDPとの認証プロセスから取得したトークンとレスポンスを保存できます。設定オプションを使用できます。アプリケーション・コードで、追加のユーザー情報を取得するためにこれらのトークンとレスポンスを検索したり、外部IDPにリクエストを送信することができます。APIを呼び出すことができます。特定のアイデンティティー・プロバイダーのトークンを取得するには、次のようにリクエストを送信する必要があります。TOKEN>アプリケーションはKeycloakで認証され、アクセストークンを受け取っている必要があります。ロールが設定されている必要があります。ユーザーはこのロールのロールマッピングを持っていなければならず、クライアント・アプリケーションのスコープ内でそのロールが必要です。この場合(Keycloak内のセキュリティー保護されたサービスにアクセスしている場合)は、ユーザー認証時にKeycloakが発行したアクセストークンを送信する必要があります。スイッチをオンにすることで、新しくインポートされたユーザーにこのロールを自動的に割り当てることができます。APIを使用して再確立できます。クライアント起点のアカウントリンクアプリケーションの中には、Facebookなどのソーシャル・プロバイダーと統合したいが、これらのソーシャル・プロバイダーを介してログインするオプションを提供したくないものもあります。Keycloakは、既存のユーザー・アカウントを特定の外部IDPにリンクするためにアプリケーションが使用できる、ブラウザー・ベースのAPIを提供しています。Linkingと呼ばれます。アカウント・リンキングは、OIDCアプリケーションによってのみ開始できます。これを動作させるには、アプリケーションがユーザーのブラウザーをKeycloakサーバーのURLに転送して、ユーザーのアカウントを特定の外部プロバイダー(Facebookなど)にリンクすることを要求します。Keycloakサーバーは、外部プロバイダーとのログインを開始します。ブラウザーは外部プロバイダーにログインし、Keycloakサーバーにリダイレクトされます。Keycloakサーバーはリンクを確立し、確認のためにアプリケーションにリダイレクトします。このプロトコルを開始する上で、クライアント・アプリケーションが満たさなければならない、いくつかの前提条件があります。管理コンソールで、必要なアイデンティティー・プロバイダーを設定し、ユーザーのレルムに対して有効にする必要がある。ユーザー・アカウントは、OIDCプロトコルを介して既存のユーザーとしてログインしている必要がある。ロールマッピングがなければならない。アプリケーションは、アクセストークン内にあるそれらのロールのスコープを許可されている必要がある。アプリケーションは、リダイレクトURLを生成するために情報が必要なので、アクセストークンにアクセスする必要があるログインを開始するには、アプリケーションがURLを作成し、ユーザーのブラウザーをこのURLにリダイレクトする必要があります。URLは次のようになります。/{auth-server-root}/realms/{realm}/broker/{provider}/link?client_id={id}&redirect_uri={uri}&nonce={nonce}&hash={hash}各パスとクエリー・パラメーターの説明は次のとおりです。セクションで定義した外部IDPのプロバイダー・エイリアスです。client_idアプリケーションのOIDCクライアントIDです。管理コンソールでアプリケーションをクライアントとして登録したときに、このクライアントIDを指定する必要があります。redirect_uriアカウントのリンクが確立された後にリダイレクトするアプリケーションのコールバックURLです。有効なクライアント・リダイレクトURIパターンでなければなりません。管理コンソールでクライアントを登録したときに定義した有効なURLパターンの1つと一致する必要があります。nonceアプリケーションが生成しなければならないランダムな文字列です。URLでエンコードされたハッシュです。URLによって生成されます。トークン変数はOIDCのアクセストークンから取得されます。基本的には、ランダムなnonce、ユーザーセッションID、クライアントID、およびアクセスするアイデンティティー・プロバイダーのエイリアスをハッシュしています。次に、アカウントリンクを確立するためのURLを生成するJavaサーブレット・コードの例を示します。provider).toString();このハッシュはなぜ含まれるのでしょうか?これにより、認証サーバーはクライアント・アプリケーションが要求を開始したことと、ユーザー・アカウントが特定のプロバイダーにリンクされることをランダムに要求する悪意のあるアプリケーションが無いことを保証します。Cookieをチェックして、ユーザーがログインしているかどうかを確認します。次に、現在のログインに基づいてハッシュを再生成し、アプリケーションによって送信されたハッシュと一致するか確認します。リダイレクトされる保障はありません。ブラウザーはアプリケーションにリダイレクトされるのではなく、エラーページにリダイレクトされることがあります。このAPIはアプリケーションが要求を開始したことを保証しますが、この操作に対するCSRF攻撃を完全に防止するわけではありません。このアプリケーションは、依然としてCSRFの攻撃のターゲットに対する防御の責任があります。APIを再起動することで、このトークンを更新できます。サービス・プロバイダー・インターフェイス(SPI)Keycloakは、必要なカスタム・コードが無くても、ほとんどのユースケースをカバーできるように作られていますが、カスタマイズもできるようにする必要があります。これを実現するために、Keycloakには独自のプロバイダーを実装できる多数のサービス・プロバイダー・インタフェース(SPI)があります。SPIの実装SPIを実装するには、SPIのProviderFactoryとProviderインターフェイスを実装する必要があります。サービス設定ファイルを作成する必要があります。ファイルを提供する必要があります。ThemeSelectorProviderFactoryのサンプルを次に示します。}}Keycloakは、複数のリクエストの状態を格納することを可能にするプロバイダー・ファクトリーの単一のインスタンスを作成します。プロバイダー・インスタンスは、それぞれのリクエストに対してファクトリーでcreateを呼び出すことによって作成されるため、軽量オブジェクトである必要があります。ThemeSelectorProviderのサンプルを次に示します。org.acme.provider.MyThemeSelectorProviderFactoryサーバー設定により、プロバイダーを設定することができます。次のような引数でサーバーを起動することで追加できます。initメソッドで設定を取得することができます。config.get("theme");}また、プロバイダーも必要に応じて他のプロバイダーを参照することができます。}}管理コンソールでのSPI実装の情報表示Keycloak管理者にプロバイダーに関する追加情報を表示すると、便利なことがあります。プロバイダー・ビルド・タイム情報(たとえば、現在インストール済みのカスタム・プロバイダーのバージョン)、プロバイダーの現在の設定(たとえば、プロバイダーが通信するリモートシステムのURL)、または動作情報(たとえば、プロバイダーが通信するリモートシステムからの平均レスポンス・タイム)を表示することができます。Keycloak管理コンソールでは、サーバーの情報ページが提供され、この種の情報が表示されます。インターフェイスを実装するだけです。サンプル実装を次に示します。利用可能な他のプロバイダーを使用できます。使用して取得できます。実装で説明されているように、これをプロバイダーに利用できます。次の2つのプロバイダーのタイプがあります。Keycloakランタイムには、特定のプロバイダー・タイプの単一のアクティブな実装のみが存在できます。Keycloakによって使用されるホスト名を指定し、Keycloakサーバー全体で共有されます。したがって、Keycloakサーバーに対してアクティブなこのプロバイダーの実装は1つしかありません。サーバー・ランタイムで使用できるプロバイダー実装が複数ある場合、そのうちの1つをデフォルトとして指定する必要があります。よって返されるIDと一致する必要があります。プロバイダーを取得できます。複数の実装が利用可能で、Keycloakランタイムで一緒に動作できるプロバイダー・タイプです。プロバイダーでは、複数の実装を使用可能にして登録できます。送信できることを意味します。プロバイダーの指定されたインスタンスを取得できます。番目の引数として指定する必要があります。よって返されるIDと一致する必要があります。使用して取得する必要さえあります。将来的に廃止される可能性があるため、この方法で独自のプロバイダーを実装することはお勧めしません。ディレクトリーにコピーするだけでサーバーに登録されます。ディレクトリーにコピーしてください。コマンドで再ビルドする必要があります。プロバイダーの無効化プロバイダのーenabled属性をfalseに設定することで、プロバイダーを無効にすることができます。Infinispanユーザー・キャッシュ・プロバイダーを無効にするには、次のようにします。--spi-user-cache-infinispan-enabled=falseJavaScriptプロバイダーKeycloakには、管理者が特定の機能をカスタマイズできるようにするために、起動中にスクリプトを実行する機能があります。認証スクリプトは、少なくとも以下の関数のうちの1つを提供しなければなりません。authenticate(..)。action(..)。関数を提供する必要があります。スクリプトを使用できます。引数から追加のコンテキスト情報を抽出できます。通常のZIPファイルです。スクリプトをKeycloakで使用できるようにするには、それらをサーバーにデプロイする必要があります。ファイルを作成する必要があります。デプロイするスクリプトに関するメタデータ情報を提供するファイル・ディスクリプターです。次の構造を持つJSONファイルです。]}このファイルは、デプロイするさまざまなタイプのスクリプト・プロバイダーを参照する必要があります。Connectスクリプト・オーセンティケーター用です。同じJARファイルに1つ以上のオーセンティケーターを含めることができます。policiesKeycloak認可サービスを使用する場合のJavaScriptポリシー用です。同じJARファイルに1つ以上のポリシーを含めることができます。Connectスクリプト・プロトコル・マッパー用です。同じJARファイルに1つ以上のマッパーを含めることができます。対応するエントリーが必要です。そのためには、各エントリーに次のプロパティーを提供する必要があります。nameKeycloak管理コンソールでスクリプトを表示するために使用されるわかりやすい名前です。指定しない場合は、代わりにスクリプト・ファイルの名前が使用されます。descriptionスクリプト・ファイルの意図をより詳しく説明するオプションのテキストです。fileNameスクリプト・ファイルの名前です。あり、JAR内のファイルにマップする必要があります。Keycloak管理コンソールを使用したスクリプトのアップロード管理コンソールを介してスクリプトをアップロードする機能は廃止されており、Keycloakの将来のバージョンでは削除される予定です。管理者はスクリプトをサーバーにアップロードできません。この動作により、悪意のあるスクリプトが誤って実行された場合にシステムに被害が及ぶ可能性を防ぎます。管理者は、スクリプトを実行する際の攻撃を防ぐために、常にJARファイルを使用してサーバーにスクリプトを直接デプロイする必要があります。スクリプトをアップロードする機能を明示的に有効にすることができます。これは細心の注意を払って使用し、すべてのスクリプトをできるだけ早くサーバーに直接デプロイする計画を作成する必要があります。機能を有効にする方法の詳細については、Profilesを参照してください。SPIフレームワークによって、特定のビルトイン・プロバイダーを実装、またはオーバーライドすることができます。Keycloak自身のコアの機能とドメインを拡張することもできます。これにより、以下も可能になります。独自のカスタムSPIを追加カスタムJPAエンティティーをKeycloakデータモデルへ追加カスタムRESTエンドポイントを追加これは大変強力な拡張機能で、独自のRESTエンドポイントをKeycloakサーバーにデプロイすることができます。これによって、あらゆる種類の拡張が可能になります。RESTエンドポイントのデフォルトセットでは利用できないような機能をKeycloakサーバー上で起動することができます。インターフェイスを実装する必要があります。次の重要なメソッドが1つあります。して機能するオブジェクトを返すためにはこのメソッドを使用します。詳しくは、Javadocとサンプルを参照してください。高度なサンプルがあります。この高度なサンプルには、認証されるRESTエンドポイントと、独自のSPIの追加やカスタムJPAエンティティーによるデータモデルの拡張のようなその他の機能を、追加する方法が示されます。カスタム・プロバイダーをパッケージングしてデプロイする方法についての詳細は、サービス・プロバイダー・インターフェイスの章を参照してください。独自のカスタムSPIを追加カスタムSPIは、特にカスタムRESTエンドポイントで有用です。独自のSPIを追加するには、次の手順を使用します。