14.7. クライアント認証
認可クライアントがバックチャネル要求を送信する必要がある場合、Red Hat build of Keycloak サーバーに対して認証する必要があります。デフォルトでは、クライアント ID およびクライアントシークレット、署名済み JWT によるクライアント認証、またはクライアントシークレットを使用した署名済み JWT によるクライアント認証の 3 つの方法があります。
14.7.1. クライアント ID およびクライアントシークレット リンクのコピーリンクがクリップボードにコピーされました!
これは、OAuth2 仕様で説明されている従来の方法です。クライアントにはシークレットがあり、そのシークレットはクライアントと Red Hat build of Keycloak サーバーの両方に知られている必要があります。Red Hat build of Keycloak 管理コンソールで特定のクライアントのシークレットを生成し、このシークレットをアプリケーション側の keycloak.json ファイルに貼り付けることができます。
"credentials": {
"secret": "19666a4f-32dd-4049-b082-684c74115f28"
}
14.7.2. 署名済み JWT によるクライアント認証 リンクのコピーリンクがクリップボードにコピーされました!
これは RFC7523 の仕様に基づいています。これは、以下のように動作します。
-
クライアントには、秘密鍵と証明書が必要です。認可クライアントの場合、これは従来の
keystoreファイルを通じて利用できます。このファイルは、クライアントアプリケーションのクラスパスまたはファイルシステム上からアクセスできます。 -
認証中に、クライアントは JWT トークンを生成し、秘密鍵で署名して、
client_assertionパラメーターの特定のリクエストで Red Hat build of Keycloak に送信します。 Red Hat build of Keycloak には、JWT の署名を検証できるように、クライアントの公開鍵または証明書が必要です。Red Hat build of Keycloak では、クライアントのクライアント認証情報を設定します。まず、管理コンソールの
Credentialsタブで、クライアントの認証方法としてSigned JWTを選択します。次に、Keysタブで次のいずれかの方法を選択できます。-
Red Hat build of Keycloak がクライアントの公開鍵をダウンロードできる JWKS URL を設定します。このオプションは、クライアントがいつでもキーをローテーションでき、Red Hat build of Keycloak が設定を変更せずに必要に応じて常に新しいキーをダウンロードするため、最も柔軟性があります。つまり、Red Hat build of Keycloak は、未知の
kid(Key ID) によって署名されたトークンを検出すると、新しいキーをダウンロードします。ただし、公開鍵を JWKS 形式でどこかに公開し、サーバーで利用できるようにするには注意が必要です。 - クライアントの公開鍵または証明書を、PEM 形式、JWK 形式、またはキーストアからアップロードします。このオプションを使用すると、公開鍵はハードコーディングされ、クライアントが新しいキーペアを生成する際に変更する必要があります。独自のキーストアが利用できない場合は、Red Hat build of Keycloak の管理コンソールから独自のキーストアを生成することもできます。このオプションは、認可クライアントを使用する場合に最も簡単です。
-
Red Hat build of Keycloak がクライアントの公開鍵をダウンロードできる JWKS URL を設定します。このオプションは、クライアントがいつでもキーをローテーションでき、Red Hat build of Keycloak が設定を変更せずに必要に応じて常に新しいキーをダウンロードするため、最も柔軟性があります。つまり、Red Hat build of Keycloak は、未知の
この方法をセットアップするには、keycloak.json ファイルに次のようなコードを記述する必要があります。
"credentials": {
"jwt": {
"client-keystore-file": "classpath:keystore-client.jks",
"client-keystore-type": "JKS",
"client-keystore-password": "storepass",
"client-key-password": "keypass",
"client-key-alias": "clientkey",
"token-expiration": 10
}
}
この設定では、認可クライアントを使用するアプリケーションのクラスパスでキーストアファイル keystore-client.jks が使用可能である必要があります。接頭辞 classpath: を使用しない場合は、クライアントアプリケーションが実行しているファイルシステム上の任意のファイルを指定できます。
14.7.3. クライアントシークレットを使用した署名済み JWT によるクライアント認証 リンクのコピーリンクがクリップボードにコピーされました!
これは、秘密鍵と証明書の代わりにクライアントシークレットを使用することを除いて、署名された JWT を使用したクライアント認証と同じです。
クライアントにはシークレットがあり、これは認可クライアントを使用するアプリケーションと Red Hat build of Keycloak サーバーの両方に知られている必要があります。管理コンソールの Credentials タブでクライアントの認証方法として Signed JWT with Client Secret を選択し、このシークレットをアプリケーション側の keycloak.json ファイルに貼り付けます。
"credentials": {
"secret-jwt": {
"secret": "19666a4f-32dd-4049-b082-684c74115f28",
"algorithm": "HS512"
}
}
"algorithm" フィールドは、クライアントシークレットを使用して署名済み JWT のアルゴリズムを指定します。次のいずれかの値である必要があります: HS256、HS384、および HS512。詳細は、JSON Web Algorithms (JWA) を参照してください。
この "algorithm" フィールドはオプションです。keycloak.json ファイルに "algorithm" フィールドが存在しない場合は、HS256 が自動的に適用されます。
14.7.4. 独自のクライアント認証方法を追加する リンクのコピーリンクがクリップボードにコピーされました!
独自のクライアント認証方法を追加することもできます。クライアント側プロバイダーとサーバー側プロバイダーの両方を実装する必要があります。詳細は、サーバー開発者ガイド の 認証 SPI セクションを参照してください。