12.6. ダイレクトの Naked Impersonation
subject_token を指定せずに内部トークン交換要求を行うことができます。これは、クライアントがレルム内の任意のユーザーになりすますことができるため、クライアントに多くの信頼を置くことから、ダイレクトの Naked Impersonation と呼ばれます。交換するサブジェクトトークンを取得できないアプリケーションをブリッジするために、これが必要になる場合があります。たとえば、LDAP と直接ログインを実行するレガシーアプリケーションを統合している場合があります。この場合、レガシーアプリケーションはユーザー自身を認証できますが、トークンを取得することはできません。
クライアントにダイレクトの Naked Impersonation を有効にすることは非常に危険です。クライアントの認証情報が盗まれた場合、そのクライアントは、システム内の任意のユーザーになりすますことができます。
12.6.1. 交換のパーミッションの付与 リンクのコピーリンクがクリップボードにコピーされました!
audience パラメーターを指定すると、呼び出し元のクライアントにはクライアントへの交換パーミッションが必要です。これを設定する方法は、この章の前半で説明しています。
さらに、呼び出し元のクライアントには、ユーザーになりすますためのアクセス許可を付与する必要があります。
手順
- メニューの Users をクリックします。
Permissions タブをクリックします。
図12.11 ユーザー権限
Permissions Enabled を On に切り替えます。
図12.12 ID プロバイダーパーミッション
ページには、impersonate リンクが表示されます。
そのリンクをクリックして、パーミッションの定義を開始します。
このセットアップページが表示されます。
図12.13 ユーザーのなりすましパーミッションの設定
- 画面上部のブレッドクラムで Client details をクリックします。
- このパーミッションのポリシーを定義します。
Policies タブに移動し、クライアントポリシーを作成します。
図12.14 クライアントポリシーの作成
- トークン交換を要求する認証されたクライアントである、開始クライアントを入力します。
ユーザーの impersonation パーミッションに戻り、定義したクライアントポリシーを追加します。
図12.15 クライアントポリシーの適用
クライアントには、ユーザーの権限を借用できるパーミッションがあります。これを正しく行わないと、このタイプの交換を行おうとすると、403 Forbidden 応答が返されます。
パブリッククライアントは、ダイレクトの Naked Impersonation を行うことはできません。
12.6.2. リクエストの作成 リンクのコピーリンクがクリップボードにコピーされました!
要求を行うには、requested_subject パラメーターを指定します。これは、有効なユーザーのユーザー名またはユーザー ID である必要があります。必要に応じて、audience パラメーターを指定することもできます。
curl -X POST \
-d "client_id=starting-client" \
-d "client_secret=the client secret" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
-d "requested_subject=wburke" \
http://localhost:8080/realms/myrealm/protocol/openid-connect/token