13.6. クライアントスコープ
Keycloak を使用して、client scope と呼ばれるエンティティーで共有クライアント設定を定義します。クライアントスコープ は、複数のクライアントの プロトコルマッパー と ロールスコープマッピング を設定します。
クライアントスコープは OAuth 2 scope パラメーターもサポートします。クライアントアプリケーションは、アプリケーションの要件に応じて、このパラメーターを使用してアクセストークン内のクレームまたはロールを要求します。
クライアントスコープを作成するには、以下の手順に従います。
メニューの Client Scopes をクリックします。
クライアントスコープのリスト
- Create をクリックします。
- クライアントスコープに名前を付けます。
- Save をクリックします。
クライアントスコープ には、通常のクライアントと同様のタブがあります。プロトコルマッパー と ロールスコープマッピング を定義できます。これらのマッピングは他のクライアントで継承でき、このクライアントスコープから継承するように設定されます。
13.6.1. プロトコル リンクのコピーリンクがクリップボードにコピーされました!
クライアントスコープを作成する場合は、Protocol を選択します。同じスコープにリンクされるクライアントには、同じプロトコルが必要です。
各レルムには、メニューに事前に定義されたビルトインクライアントスコープのセットがあります。
- SAML プロトコル: role_listこのスコープには、SAML アサーションのロールリストのプロトコルマッパーが 1 つ含まれます。
OpenID Connect プロトコル: いくつかのクライアントスコープが利用できます。
roles
このスコープは、OpenID Connect 仕様では定義されておらず、アクセストークンの scope クレームに自動的に追加されません。このスコープにはマッパーがあり、ユーザーのロールをアクセストークンに追加して、クライアントロールが 1 つ以上あるクライアントの対象を追加するために使用されます。これらのマッパーの詳細は トークンロールマッピングセクション と オーディエンスセクション を参照してください。
web-origins
このスコープも OpenID Connect 仕様では定義されておらず、アクセストークンを要求する scope には追加されません。このスコープは、許可される Web オリジンをアクセストークンの allowed-origins クレームに追加するために使用されます。
microprofile-jwt
このスコープは、MicroProfile/JWT 認証仕様 で定義された要求を処理します。このスコープは、upn クレームのユーザープロパティーマッパーと、groups クレームのレルムロールマッパーを定義します。これらのマッパーを変更することで、さまざまなプロパティーを使用して MicroProfile/JWT 固有のクレームを作成できます。
offline_access
このスコープは、クライアントがオフライントークンを取得する必要がある場合に使用されます。オフライントークンの詳細は、オフラインアクセス セクションと OpenID Connect 仕様 を参照してください。
- profile
- address
- phone
クライアントスコーププロファイル、profile、email、address、および phone は、OpenID Connect 仕様 に定義されています。これらのスコープにはロールスコープマッピングが定義されていませんが、プロトコルマッパーが定義されます。これらのマッパーは、OpenID Connect 仕様で定義されているクレームに対応しています。
たとえば、phone クライアントスコープを開いて Mappers タブを開くと、phone スコープの仕様で定義されているクレームに対応するプロトコルマッパーが表示されます。
クライアントスコープマッパー
phone クライアントスコープがクライアントにリンクされると、そのクライアントは phone クライアントスコープで定義されたすべてのプロトコルマッパーを自動的に継承します。このクライアントに発行されたアクセストークンには、ユーザーに関する電話番号 (電話番号が定義されているか) が含まれます。
ビルトインクライアントスコープには、仕様で定義されているプロトコルマッパーが含まれます。クライアントスコープを編集し、プロトコルマッパーまたはロールスコープマッピングを作成、更新、または削除できます。
13.6.3. トークンスコープに含める リンクのコピーリンクがクリップボードにコピーされました!
クライアントスコープに Include in token scope のスイッチがあります。オンの場合、このクライアントスコープの名前がアクセストークンプロパティースコープと、トークンレスポンスおよびトークンイントロスペクションエンドポイントレスポンスクレーム scope
に追加されます。オフの場合、このクライアントスコープはトークンおよびトークンイントロスペクションエンドポイント応答から省略されます。前述のように、一部の組み込みクライアントスコープではこのスイッチが無効になっています。つまり、特定のリクエストに適用されても、scope
クレームには含まれません。
13.6.4. クライアントとリンククライアントスコープ リンクのコピーリンクがクリップボードにコピーされました!
クライアントスコープとクライアント間のリンクは、クライアントの Client Scopes タブで設定されます。クライアントアプリケーション myclient
の場合は次のようになります。
クライアントにリンクするクライアントスコープ
クライアントスコープとクライアントをリンクする方法は 2 つあります。
- デフォルトのクライアントスコープ
- この設定は、OpenID Connect および SAML クライアントに適用されます。デフォルトのクライアントスコープは、このクライアントの OpenID Connect トークンまたは SAML アサーションを発行するときに適用されます。クライアントはプロトコルマッパーとロールスコープのマッピングをクライアントスコープで継承します。OpenID Connect Protocol の場合、OpenID Connect の認可要求の scope パラメーターで使用される値にかかわらず、マッパーおよびロールの範囲マッピングは常に適用されます。
- オプションのクライアントスコープ
- この設定は、OpenID Connect クライアントにのみ適用されます。オプションのクライアントスコープはこのクライアントのトークンを発行するときに適用されますが、これらは OpenID Connect 認可要求で scope パラメーターによって要求される場合にのみ適用されます。
13.6.4.1. 例 リンクのコピーリンクがクリップボードにコピーされました!
この例では、クライアントに profile と email がデフォルトのクライアントスコープとしてリンクされていることと、phone と address がオプションのクライアントスコープとしてリンクされていることを前提とします。クライアントは、要求を OpenID Connect 認可エンドポイントに送信する際に、scope パラメーターの値を使用します。
scope=openid phone
scope=openid phone
scope パラメーターには文字列が含まれ、スコープの値はスペースで区切られます。openid の値は、すべての OpenID Connect 要求に使用されるメタ値です。トークンには、クライアントスコープの profile および email (デフォルトのスコープ)、および phone (scope パラメーターで要求される任意のクライアントスコープ) からのマッパーおよびロールスコープのマッピングが含まれます。
13.6.4.2. 専用クライアントスコープ リンクのコピーリンクがクリップボードにコピーされました!
すべてのクライアントにリンクされた特別なクライアントスコープがあります。これは専用のクライアントスコープであり、特定のクライアントの Client scopes タブをクリックすると、常に最初のクライアントスコープとして表示されます。たとえば、クライアント myclient
の場合、クライアントスコープは myclient-dedicated
として表示されます。このクライアントスコープは、クライアント自体に直接リンクされているプロトコルマッパーとロールスコープマッピングを表します。
専用クライアントスコープのリンクをクライアントから解除できません。また、この専用クライアントスコープを別のクライアントにリンクできません。つまり、専用クライアントスコープは、単一のクライアントに固有のプロトコルマッパーとロールスコープマッピングにのみ役立ちます。複数のクライアント間で同じプロトコルマッパー設定を共有する場合は、レルムタブの Client scopes でクライアントスコープを作成し、この共有設定を適用するすべてのクライアントに、その共有クライアントスコープをリンクするのが一般的です。
専用クライアントスコープの Scope タブでは、このクライアントに適用可能なロールスコープマッピングを定義できます。このタブでは、Full scope allowed スイッチも確認できます。このスイッチの詳細は このセクション と このセクション で説明します。
管理 REST API および Red Hat build of Keycloak では、プロトコルマッパーとロールスコープマッピングがクライアント自体に内部的にリンクされているため、専用のクライアントスコープは存在しません。専用クライアントスコープは、実際には管理コンソール UI の単なる抽象化です。
13.6.5. クライアントスコープの評価 リンクのコピーリンクがクリップボードにコピーされました!
Mappers タブにはプロトコルマッパーが含まれ、Scope タブにはこのクライアントに対して宣言されたロールスコープマッピングが含まれます。クライアントスコープから継承されるマッパーおよびスコープのマッピングは含まれません。有効なプロトコルマッパー (クライアント自体に定義されたプロトコルマッパー、リンクされたクライアントスコープから継承されるプロトコルマッパー) と、クライアントのトークンの生成時に使用される効果的なロールスコープマッピングを確認できます。
手順
- クライアントの クライアントスコープ タブをクリックします。
- サブタブ Evaluate を開きます。
- 適用する任意のクライアントスコープを選択します。
これにより、scope パラメーターの値も表示されます。このパラメーターは、アプリケーションから Red Hat build of Keycloak OpenID Connect 認証エンドポイントに送信する必要があります。
アプリケーションで Red Hat build of Keycloak JavaScript アダプター を使用する場合、希望する値を持つ スコープ パラメーターを送信する方法は、そのセクションを参照してください。
また、このクライアントに発行されたアクセストークン、ID トークン、または UserInfo 応答が、選択された特定のユーザーと、audience
パラメーターの特定の値をどのように検索するかをシミュレートすることもできます。現時点では、audience
パラメーターはトークン交換許可に対してのみサポートされていることに注意してください。他の付与をシミュレートする場合は、空のままにすることを推奨します。
クライアントスコープの評価
すべての例は、scope パラメーターに指定された値を使用して、特定のユーザー用に生成され、特定のクライアント用に発行されます。この例には、使用されるすべてのクレームとロールマッピングが含まれています。
13.6.6. クライアントスコープのパーミッション リンクのコピーリンクがクリップボードにコピーされました!
ユーザーにトークンを発行する場合、クライアントスコープは、ユーザーがトークンを使用できる場合にのみ適用されます。
クライアントスコープにロールスコープマッピングが定義されていない場合は、各ユーザーはこのクライアントスコープを使用できます。ただし、クライアントスコープにロールスコープマッピングが定義されている場合に、ユーザーは少なくとも 1 つのロールに所属する必要があります。ユーザーロールとクライアントスコープのロール間に交差部分が必要です。この交差点の評価には、複合ロールが考慮されます。
ユーザーがクライアントスコープを使用できない場合には、トークンの生成時にプロトコルマッパーまたはロールスコープのマッピングは使用されません。クライアントスコープはトークンの scope 値には表示されません。
13.6.7. レルムのデフォルトクライアントスコープ リンクのコピーリンクがクリップボードにコピーされました!
Realm Default Client Scopes を使用して、新たに作成されたクライアントに自動的にリンクされるクライアントスコープのセットを定義します。
レルムのデフォルトクライアントスコープを表示するには、管理コンソールの左側にある Client Scopes タブをクリックします。Assigned type 列で、特定のクライアントスコープを Default Client Scope または Optional Client Scope として新規作成されるクライアントに追加するかどうかを指定できます。デフォルト および オプション のクライアントスコープの詳細は、このセクション を参照してください。
クライアントが作成されると、必要に応じて、デフォルトのクライアントスコープのリンクを解除できます。これは、デフォルトロール の削除に似ています。
13.6.8. スコープの説明 リンクのコピーリンクがクリップボードにコピーされました!
スコープ という用語は、Red Hat build of Keycloak 内および OAuth/OIDC 仕様において複数の意味を持ちます。以下で、Red Hat build of Keycloak で使用されるさまざまな スコープ を明確に説明しています。
- クライアントスコープ
- クライアントスコープは、レルムレベルで設定され、クライアントにリンクできる Red Hat build of Keycloak 内のエンティティーです。scope パラメーターの対応する値で Keycloak 認可エンドポイントに要求を送信すると、クライアントスコープはその名前によって参照されます。詳細は、クライアントスコープのリンク セクションを参照してください。
- ロールスコープのマッピング
- これは、クライアントまたはクライアントスコープの Scope タブで利用できます。ロールスコープマッピング を使用して、アクセストークンで使用できるロールを制限します。詳細は、ロールスコープマッピング セクションを参照してください。
- 承認スコープ
- 認可スコープ は、アプリケーションで実行できるアクションに対応します。詳細は、認可サービスガイド を参照してください。