概要
Keycloak は、認証、ユーザーフェデレーション、強力な認証、ユーザー管理、きめ細かい認可を提供し、最小限の労力でアプリケーションとサービスを保護します。OIDC および SAML プロトコルをサポートしています。
README プレビュー
\n\n\n[](https://bestpractices.coreinfrastructure.org/projects/6818)\n[](https://clomonitor.io/projects/cncf/keycloak)\n[](https://securityscorecards.dev/viewer/?uri=github.com/keycloak/keycloak)\n[](https://artifacthub.io/packages/olm/community-operators/keycloak-operator)\n\n\n[](docs/translation.md)\n\n# Open Source Identity and Access Management\n\nAdd authentication to applications and secure services with minimum effort. No need to deal with storing users or authenticating users.\n\nKeycloak provides user federation, strong authentication, user management, fine-grained authorization, and more.\n\n\n## Help and Documentation\n\n* [Documentation](https://www.keycloak.org/documentation.html)\n* [User Mailing List](https://groups.google.com/d/forum/keycloak-user) - Mailing list for help and general questions about Keycloak\n* Join [#keycloak](https://cloud-native.slack.com/archives/C056HC17KK9) for general questions, or [#keycloak-dev](https://cloud-native.slack.com/archives/C056XU905S6) on Slack for design and development discussions, by creating an account at [https://slack.cncf.io/](https://slack.cncf.io/).\n\n\n## Reporting Security Vulnerabilities\n\nIf you have found a security vulnerability, please look at the [instructions on how to properly report it](https://github.com/keycloak/keycloak/security/policy).\n\n\n## Reporting an issue\n\nIf you believe you have discovered a defect in Keycloak, please open [an issue](https://github.com/keycloak/keycloak/issues).\nPlease remember to provide a good summary, description as well as steps to reproduce the issue.\n\n\n## Getting started\n\nTo run Keycloak, download the distribution from our [website](https://www.keycloak.org/downloads.html). Unzip and run:\n\n bin/kc.[sh|bat] start-dev\n\nAlternatively, you can use the Docker image by running:\n\n docker run quay.io/keycloak/keycloak start-dev\n \nFor more details refer to the [Keycloak Documentation](https://www.keycloak.org/documentation.html).\n\n\n## B
FAQ (5)
トラブル対応VCIEnsureCredentialTimeClaimsNotLinkable の iat リンカビリティ警告を伴う、断続的に発生する Oid4VciNonHaipTestSuite の失敗を修正する方法は?
このフレーキーな失敗は、確率的な RANDOMIZE 時刻クレーム戦略が原因で発生します。2つの独立したランダムオフセットが偶然一致することがあり、その結果 iat2 - iat1 が実際の発行間隔を近似してしまいます。再実行すれば通常はパスしますが、決定的な修正方法は MINUTE 単位で ROUND を使用することです。
tests/conformance/src/test/java/org/keycloak/tests/conformance/vci/VciConformanceRealmUtil.java の applyCommon() 内で、RANDOMIZE/300秒の設定を次のように置き換えてください。
.attribute(OID4VCIConstants.TIME_CLAIMS_STRATEGY, TimeClaimNormalizer.Strategy.ROUND.name())
.attribute(OID4VCIConstants.TIME_ROUND_UNIT, TimeClaimNormalizer.RoundUnit.MINUTE.name())
HOUR や DAY ではなく MINUTE を使用してください。クレデンシャルの有効期限は300秒であり、300秒はちょうど5つの分の境界に相当します。より粗い単位では exp が丸められた iat と同じ値に丸められてしまい、クレデンシャルが即座に期限切れになる可能性があります。丸めは RFC 9901 §10.1 で認められたリンク不可能性の軽減策です。Oid4VciNonHaipTestSuite コンフォーマンスジョブを再ビルドして再実行してください。
トラブル対応EntityManager API リンクに対して HTTP 404 で失敗する Keycloak ExternalLinksTest を修正する方法
server-development user-storage ガイド内の EntityManager リンクを修正してください。/entitymanager で終わる小文字のパスを、大文字小文字が区別される /EntityManager.html に置き換えてください。修正後の URL が HTTP 200 を返すことを確認してから、次を再実行してください: ./mvnw install -Dtest=ExternalLinksTest -am -pl docs/documentation/tests -Pdocumentation。
トラブル対応CVE-2026-91777 jackson-databind のデシリアライゼーション DoS 脆弱性を修正するには?
com.fasterxml.jackson.core:jackson-databind をパッチ適用済みバージョン **2.22.3**、**2.21.7**、または **2.18.11** にアップグレードしてください(影響を受けるバージョン: 2.21.5、2.22.1、2.22.2 およびそれ以前のバージョン系列)。
**Maven:**
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.22.3</version>
</dependency>
**Gradle:**
implementation 'com.fasterxml.jackson.core:jackson-databind:2.22.3'
**Quarkus ユーザー:** バージョンは quarkus-bom によって管理されています(例: 3.40.1 には影響を受けるバージョンが同梱されています)。修正が含まれる新しい quarkus-bom リリースにアップグレードするか、BOM のインポート後に dependencyManagement セクションで修正済みの jackson-databind バージョンを明示的に固定してください。
この脆弱性は、@JsonIdentityInfo オブジェクト ID を持つ JSON を Collection または Map 型にデシリアライズする際に、N 個の前方参照が逆順で解決される場合、二次関数的な CPU 消費(N*(N+1)/2 回の同一性比較)を引き起こします。これにより、ネストが浅く線形サイズのペイロードでサービス拒否(DoS)が可能になります。パッチは、未解決参照アキュムレータに対する繰り返しの線形スキャンを、キー付きルックアップ構造に置き換えます。
**アップグレードが不可能な場合の緩和策:** 信頼できない、または攻撃者が制御する JSON を、ID 管理が有効な(@JsonIdentityInfo)コレクションやマップにデシリアライズしないようにし、API エッジでペイロードサイズの制限を強制してください。
トラブル対応Keycloak ワークフローの条件で `!has-role()` を使用すると、なぜ意図とは逆のユーザーに対して実行されるのですか?
Keycloak 26.8.0 では、ワークフロー式は not、and、or のみをサポートしています。! 文字はバリデーションエラーを発生させる代わりに暗黙的に削除されるため、if: "!has-role(vip)" は if: "has-role(vip)" として評価され、条件が反転してしまいます。サポートされている演算子に置き換えてください: if: "not has-role(vip)"。同様に、&&/|| の代わりに and/or を使用してください。影響を受けるワークフローを特定するには、サーバーログで token recognition error at: '!' を検索してください。修正版では、認識できない文字は workflowExpressionInvalid で拒否されます。利用可能になったら、PR "Reject workflow expressions with unrecognized characters" を含むリリースにアップグレードしてください。
トラブル対応Keycloak Protection API がリソースを、指定したユーザーではなくリソースサーバーの所有として作成してしまう問題は、どうすれば修正できますか?
この動作は Keycloak 26.6.x において意図的なものです。PAT を使用して POST /realms/{realm}/authz/protection/resource_set を呼び出すと、Keycloak はリクエストボディの owner を無視し、PAT のサブジェクト(通常はリソースサーバー)に所有権を割り当てます。PUT でリソースを更新しても所有者は変更されません。
別のユーザーが所有するリソースを作成するには、代わりに Keycloak Admin API を使用してください:
curl -X POST \
"http://localhost:8080/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource" \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Alice Resource",
"owner": "{alice-user-id}",
"ownerManagedAccess": true
}'
clientId ではなくクライアントの UUID を使用し、認可リソースを管理する権限を持つ管理者トークンを使用してください。ユーザーがリソースを管理すべきかどうかに応じて ownerManagedAccess を設定してください。Protection API が作成できるのは、提示された PAT が表すサブジェクトのリソースのみです。任意のユーザーへの所有権の設定は、現在は Admin API を通じて行う必要があります。