Keycloak 7.0.0

ハイライト

WildFly 17 アップグレード

Keycloakサーバーは内部でWildFly 17を使用するようにアップグレードされました。

Tomcat 9アダプターのサポート

Apache Tomcat 8とApache Tomcat 9のJavaアダプターは統合され、現在は両方に対応しています。

新しいアカウント・コンソール

新しいアカウント・コンソールとアカウントREST APIに対して多くの改良が行われました。まだ準備は完了していませんが、それが実現しつつあり、うまくいけば、Keycloak 8で完了します。

署名および暗号化されたIDトークンのサポート

Keycloakは、JSON Web Encryption(JWE)の仕様に従って署名および暗号化されたIDトークンをサポートできます。

テストとリリースの自動化

Keycloakチームは、KeycloakとRed Hat Single Sign-Onの両方のテストとリリースに関する自動化にかなりの時間を費やしました。

その他の改善

  • JavaScriptアダプターに追加されたPKCEのサポート。 thomasdarimont に感謝をします。

  • Keycloakコンテナー・イメージに追加されたOracle Databaseのサポート。 nerdstep に感謝をします。

  • SAMLアダプターに追加されたクロックスキューのサポート。 steevebtib に感謝をします。

  • Node.jsアダプターのTypeScriptサポート。 evanshortiss に感謝をします。

  • Gatekeeperは、Cookieで暗号化することで、ヘッダーで暗号化されていないトークンを提供できるようになりました。また、Keycloakサーバーで Revoke Refresh Token が有効になっている場合に起きる、Gatekeeperのバグがありました。この問題は修正されています。 fredbi に感謝をします。

  • 管理コンソールでクライアントロールに対するユーザーの一覧を表示するための新しいタブ。 unly に感謝をします。

Keycloak 6.0.0

WildFly 16 アップグレード

Keycloakサーバーは内部でWildFly 16を使用するようにアップグレードされました。

SmallRye HealthとSmallRye Metricsの拡張

Keycloakは、標準的な正常性とメトリクスのエンドポイントを提供するSmallRye HealthとSmallRye Metricsの拡張機能が有効になりました。Keycloak固有のメトリクスと同様にいくつかのドキュメントを間もなく追加します。

PS256のサポート

tnorimat のおかげで、KeycloakはPS256でトークンの署名と検証をサポートするようになりました。

MP-JWTクライアント・スコープ

Eclipse MicroProfile仕様に従ったトークンを発行しやすくするための新しい組み込みクライアント・スコープです。

Keycloak 5.0.0

WildFly 15 アップグレード

Keycloakサーバーは内部でWildFly 15を使用するようにアップグレードされました。

Keycloak 4.8.0.Final

OpenShitとの統合

サービス・アカウントをOAuthクライアントとして自動的にKeycloakに公開する機能を含め、OpenShift 3.11をKeycloakで完全に保護することが可能になりました。

これは現在はテクノロジー・プレビュー機能です。

Rules/Droolsポリシーはテクノロジー・プレビュー機能としてマークされました

これまで、Droolsポリシーはデフォルトで有効になっていました。しかし、現在はこのポリシータイプはテクノロジー・プレビュー機能としてのみ利用可能です。使用するには、プレビュー・プロファイルまたは対応する機能を有効にする必要があります。詳しくは、 Authorization Services Guide を見てください。

DB2のサポートを削除

DB2サポートはしばらくの間非推奨でした。このリリースでは、DB2のサポートをすべて削除しました。

Keycloak 4.7.0.Final

Remember Meの強化

Remember Meセッション用に異なるセッションアイドル時間と最大タイムアウトを指定する機能が導入されました。これにより、Remeber Meセッションを通常のセッションよりも長く生存させることができます。

グループのページネーション・サポート

これまで、多数のグループが管理コンソールで問題を引き起こしていました。これは現在、グループのページネーションの導入によって解決されています。

オフライン・セッションが多数ある場合の起動時間を改善

これまでは、オフライン・セッションが多いと、サーバーの起動に時間がかかる場合がありました。この起動時間は大幅に短縮されました。

Keycloak 4.6.0.Final

WildFly 14へのアップグレード

Keycloakサーバーは内部でWildFly 14を使用するようにアップグレードされました。

Keycloak Gatekeeper

Keycloak Gatekeeperは、アダプターなしでアプリケーションとサービスを保護するために使用できるセキュリティー・プロキシーを提供します。アプリケーションと並行してローカルにインストールすることも、OpenShiftまたはKubernetesのサイドカーとしてインストールすることもできます。

この機能をKeycloakに提供してくれた gambol99 に大きな感謝をします。

Keycloak 4.5.0.Final

Signature SPI

Signature SPIは、追加の署名アルゴリズムをプラグインすることを可能にします。 これにより、追加の署名が有効になり、署名の生成方法を変更することもできます。たとえば、これを使用すると、HSMデバイスを使用してトークンに署名できます。

この作業の重要な部分をコントリビューションしてくれた tnorimat に感謝します。

新しい署名アルゴリズム

Signature SPIと並んで、追加の署名アルゴリズムのサポートもあります。

Keycloakは現在、RS256、RS384、RS512、ES256、ES384、ES512、HS256、HS384、およびHS512をサポートしています。

楕円曲線デジタル署名アルゴリズム(ES256/384/512)は、RSA署名と同様のセキュリティ特性を提供しますが、使用するCPUが大幅に少なくなるため非常に興味深いものです。

アプリケーションに署名を検証させたくない場合は、HMAC(HS256/384/512)も非常に便利です。これらは対称型の署名であるため、Keycloakのみが署名を検証できますが、アプリケーションはトークンの検証にトークン・イントロスペクション・エンドポイントを使用する必要があります。

この作業の重要な部分をコントリビューションしてくれた tnorimat に感謝します。

OpenID Connectクライアントに対するより良いAudienceサポート

OpenID Connectクライアント用に発行されたトークンでAudienceを指定できるようになりました。アダプター側でのAudience検証のサポートもあります。

マイナーな改善

  • LocaleSelector SPIが追加されました。これにより、特定のリクエストに対してロケールを解決する方法を変更できます。 knutz3n に感謝します。

  • 最初のIdP認証後にアイデンティティー・プロバイダーのアイデンティティーを既存のアカウントに自動的にリンクするオーセンティケーターを追加しました。 slominskir に感謝します

Keycloak 4.4.0.Final

WildFly 13へのアップグレード

Keycloakサーバーは、内部でWildFly 13を使用するようにアップグレードされました。これは、基礎となる依存関係の更新と、構成のいくつかの変更を意味します。また、WildFly 13アダプターもサポートしており、Cross-DCセットアップ用に基礎となるJDG/Infinispanサーバーのバージョンをアップグレードしました。詳しくは Upgrading Guide を参照してください。

Node.jsでの認可サービスのサポート

Node.jsで認可サービスをサポートすることで、Node.jsアダプターを使用してきめ細かい中央での認可を行うことが非常に簡単になります。

マイナーな改善

  • ウェルカム・ページのデザインを更新

  • 現在のロケールをOAuth2 IdPに渡すことを許可。 knutz3n に感謝します。

  • Content-Security-Policy-Report-Onlyセキュリティー・ヘッダーのサポート。 knutz3n に感謝します。

  • SAML用のスクリプトベースのProtocolMapper。 AlistairDoswald に感謝します。

Keycloak 4.3.0.Final

Hostname SPI

Hostname SPIは、Keycloakのホスト名を設定するためのより柔軟な方法を導入します。2つの組み込みプロバイダがあります。1つ目はrequestで、リクエストヘッダーを使ってホスト名を決定します。2番目はfixedで、固定ホスト名を設定できます。後者は、有効なホスト名のみが使用可能であることを確認し、また内部アプリケーションが代替URLを通じてKeycloakを呼び出すことを可能にします。

詳細については、 Server Administration Guide の脅威軽減のセクションを参照してください。

X509 Client Authenticator

新しく追加されたClient Authenticatorは、X509クライアント証明書とMutual TLSを使用してクライアントからの接続を保護します。それに加えて、Keycloakサーバーはクライアント証明書のSubject DNフィールドを検証します。

認可サービスのパフォーマンス向上

今回のリリースでは、全面的にポリシー評価のパフォーマンスが向上し、信頼性とスループットが向上しました。私たちが行った主な変更は、不要なフローを回避してポリシー評価パスを最適化し、発生したらすぐに決定情報を収集することでした。また、要求ごとにポリシー決定キャッシュを導入し、以前に評価されたポリシーによる重複した決定を避けるようにしました。

私たちは、より良いエクスペリエンスを与える他のキャッシュ・レイヤーにも取り組んでいます。 KEYCLOAK-7952 を参照してください。

サーバーからパーミッションを取得する際のレスポンスモードの選択

以前のバージョンでは、アクセストークンとリフレッシュトークンを含む標準のOAuth2レスポンスを使用して、パーミッションは常にサーバーから返されていました。このリリースでは、クライアントは response_mode パラメーターを使用してサーバーが認可リクエストにどのように応答するべきかを指定することができます。このパラメーターは次の2つの値を受け入れます。

  • decision

    レスポンスには、サーバーによってパーミッションが付与されたかどうかを示すフラグのみを含めるように指示します。そうでなければ、 403 HTTPステータスコードが返されます。

  • permissions

    JSON形式を使用して、レスポンスにサーバーから付与されたすべてのパーミッションが含まれるように指示します。

NodeJSポリシー・エンフォーサー

NodeJS用のアダプターである keycloak-nodejs-connectは、サーバーからの決定に基づいてリソースを保護するための構築をサポートするようになりました。新しい構文により、ユーザーは次のようにきめ細かいパーミッションを使用して自分のリソースを保護できます。

app.get('/protected/resource', keycloak.enforcer('resource:view'), function (req, res) {
  res.json({message: 'access granted'});
});

Googleログイン用のホストドメインのサポート

Googleでのログインは、GoogleログインをGoogleの特定のホストドメインに制限するための hd パラメーターをサポートします。これがアイデンティティー・プロバイダーで指定されている場合は、異なるドメインからのログインは拒否されます。

brushmateのコントリビューションに感謝します。

HTML出力における危険なタグのエスケープ

ほとんどのHTML出力はHTMLタグに対してすでにエスケープされていますが、HTMLタグが許可されている場所がいくつかあります。これらは、値を更新するためには管理者アクセスが必要な箇所に限られています。そのようなフィールドを更新するには管理者アクセスが必要になりますが、追加の防御層が追加され、現在では <script> のような危険な要素をエスケープしています。

Keycloak 4.2.0.Final

Cordovaのブラウザータブのサポート

Cordova用のJavaScriptアダプターでブラウザータブとユニバーサル・リンクを使用できるようになりました。これにより、複数のアプリケーション間のSSOが可能になり、セキュリティが向上します。

gtudan のコントリビューションに感謝します。

SAMLアダプターのマルチテナンシーのサポート

SAMLアダプターは、OpenID Connect用の組み込みアダプターのように、マルチテナンシーをサポートします。

ドット(.)でクレームを作成するオプション

以前のバージョンでは、ドット(.)文字を含むクレーム名を使用してトークン内にクレームを作成することはできませんでした。現在は、設定内のドット文字をエスケープすることが可能になり、ドット文字を含むクレーム名を使用できます。

Keycloak 4.1.0.Final

Spring Boot 2をデフォルトのスターターにしました

リリース4.1以降、Spring BootスターターはSpring Boot 2アダプターをベースにしています。以前のバージョンのSpring Bootを使用している場合は、keycloak-legacy-spring-boot-starterが利用可能です。

Keycloak 4.0.0.Final

クライアント・スコープとOAuth 2スコープ・パラメーターのサポート

クライアント・テンプレートに代わるクライアント・スコープのサポートが追加されました。クライアント・スコープは、より柔軟なアプローチであり、OAuthの scope パラメーターに対してより良いサポートを提供します。

同意画面には、クライアント・スコープに関する変更があります。同意画面のリストは、プロトコル・マッパーとロールの代わりにクライアント・スコープにリンクされるようになりました。

詳細については、マニュアルおよび移行ガイドを参照してください。

OAuth 2 Certificate Bound Access Tokens

OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokensの仕様の部分実装が行われました。より正確には、Certificate Bound Access Tokenをサポートしました。コンフィデンシャル・クライアントが双方向SSLを使用できる場合、Keycloakはクライアント用に発行されたトークンにクライアント証明書のハッシュを追加できます。現在のところ、Keycloak自体だけで、トークンハッシュを検証します(例えば、 refresh token リクエストの間)。アダプターにもサポートを追加する予定です。Mutual TLSクライアント認証のサポートも追加する予定です。

tnorimatのコントリビューションに感謝します。

認可サービス

UMA 2.0のサポート

UMA 2.0が認可サービスでサポートされるようになりました。以前のバージョンのKeycloakからアップグレードしている場合は、ドキュメントの詳細を確認してください。

Keycloakアカウント・サービスによるUser-Managed Access

これで、エンドユーザーはKeycloakアカウント・サービスを通じて、リソースとそのリソースに関連付けられたパーミッションを管理することができます。そこから、リソースオーナーは自分のリソースを確認し、他のユーザーとリソースを共有したり、他のユーザーからの要求を承認することができます。

非同期認可フロー

UMAを使用する場合、クライアント・アプリケーションは、認可リクエストが認可フローを開始してリソースオーナーの承認を求めるかどうかを選択できるようになりました。この機能により、アプリケーションは、別のユーザーの代わりにリソースの1つにアクセスしようとするときに、リソースオーナーの承認を求めることができます。

ユーザー管理パーミッションAPI

リソースサーバーは、特定のユーザーが所有するリソースに追加のポリシーを関連付けることができるようになりました。新しいAPIは、ロール、グループ、ユーザー、クライアント、JavaScriptなどのさまざまなポリシータイプを使用して、これらのパーミッションを管理する操作を提供します。

クレームのプッシュ

クライアント・アプリケーションは、任意のクレームに基づいてパーミッションを評価するために、認可リクエストとともにKeycloakにそれらのクレームを送信できるようになりました。これは、特定のトランザクションの範囲内で、またはランタイムに関する情報に基づいてアクセスを許可(または拒否)する必要がある場合に、非常に便利です。

リソース属性

Keycloakで保護されているリソースに属性を関連付け、これらの属性を使用してポリシーのパーミッションを評価することが可能になりました。

ポリシー・エンフォーサーは、通常のアクセストークンを受け入れるようになりました

場合によっては、通常のアクセストークンをリソースサーバーに送信するだけで、これらのリソースに対してポリシーを適用することができます。

このリリースで導入された主な変更の1つは、(UMAを使用しない場合)リソースサーバーによって保護されたリソースにアクセスするために、アクセストークンをRPTと交換する必要がなくなったことです。ポリシー・エンフォーサーがリソースサーバー側でどのように設定されているかに応じて、通常のアクセストークンをベアラートークンとして送信するだけで、パーミッションは引き続き適用されます。

ポリシー・エンフォーサーは、オンデマンドでサーバーからリソースをロードできるようになりました

今のところ、 policy-enforcer で設定されたアプリケーションをデプロイするときに、ポリシー・エンフォーサーはサーバーからすべてのプロテクトされたパスをロードするか、またはアダプター設定から取得したこれらのパスをマップするだけです。ユーザーは、サーバーからオンデマンドでパスをロードし、アダプター設定でこれらのリソースをマップすることを避けることができます。保護されたリソースの数に応じて、この機能を使用すると、アプリケーションのデプロイメント時間を短縮することもできます。

ポリシー・エンフォーサーは、リソース・キャッシュの設定をサポートするようになりました

サーバーへの不必要なヒットを避けるために、ポリシー・エンフォーサーは、保護されたリソースとアプリケーション内の対応するパスとの間のマッピングをキャッシュします。ユーザーはキャッシュの動作を設定したり、完全に無効にすることもできます。

クレーム情報ポイント

アダプターの policy-enforcer 定義( keycloak.json )もプッシュされたクレームの概念をサポートするように更新されました。ここには、クレーム情報ポイントという概念があります。このクレーム情報ポイントには、HTTPリクエストや外部HTTPサービスなど、さまざまなソースからクレームをプッシュするように設定できます。

Evaluation APIの改善

Keycloak(特にJavaScriptとDroolsポリシー)でポリシーを実装するために使用されるEvaluation APIは、以下のメソッドを提供します。

  • ユーザーロール、グループ、および属性のチェックなど、現在のレルムからの情報にアクセスする

  • 特定のパーミッションの強制方法に関する追加情報を提供するために、任意のクレームをリソースサーバーにプッシュバックする

認可サービス

UMA 2.0

ユーザーがアカウント管理コンソールを介してユーザーアクセスを管理できるようにするなど、UMA 2.0が認可サービスでサポートされるようになりました。認可サービスには、他にも追加や改良があります。

クレームのプッシュ

パーミッションを評価するときに、クライアントが追加のクレームをプッシュし、ポリシーで使用されるようにすることが可能になりました。

リソース属性

パーミッションを評価するときに、リソースの属性を定義して、ポリシーで使用されるようにすることが可能になりました。

テーマとテーマのリソース

通常のプロバイダー配備で、テーマをKeycloakにホットデプロイできるようになりました。テーマリソースのサポートも追加しました。テーマを作成せずにテンプレートとリソースを追加することができます。これは、認証フローに追加されるページを必要とするカスタム・オーセンティケーターにとって便利です。

特定のクライアントのテーマを無効にするサポートも追加しました。それがニーズに合っていない場合は、カスタムロジックを実装してテーマを選択できる新しいテーマセレクターSPIもあります。

Instagramアイデンティティー・プロバイダー

Instagramでログインするためのサポートが追加されました。 hguerrero からのコントリビュートに感謝します。

管理コンソールでのユーザーIDによる検索

管理コンソールでIDを使用してユーザーを検索するには、以前はURLを編集する必要がありましたが、ユーザー検索フィールドで直接検索することが可能になりました。

アダプター

Spring Boot 2

Spring Boot 2をサポートしました。

Fuse 7

Fuse 7をサポートしました。

JavaScript - ネイティブPromiseのサポート

JavaScriptアダプターは、ネイティブのPromiseをサポートするようになりました。古いスタイルのPromiseも、今までどおりサポートしています。どちらも区別せずに使用できます。

JavaScript - Cordovaオプション

JavaScriptアダプターのログインやその他のメソッドにCordova固有のオプションを渡すことができるようになりました。 loorent からのコントリビュートに感謝します。