7.6. ダイレクトの Naked Impersonation
subject_token
を指定せずに内部トークン交換要求を行うことができます。これは、クライアントがレルム内の任意のユーザーになりすますことができるため、クライアントに多くの信頼を置くことから、ダイレクトの Naked Impersonation と呼ばれます。交換するサブジェクトトークンを取得できないアプリケーションをブリッジするために、これが必要になる場合があります。たとえば、LDAP と直接ログインを実行するレガシーアプリケーションを統合している場合があります。この場合、レガシーアプリケーションはユーザー自身を認証できますが、トークンを取得することはできません。
クライアントにダイレクトの Naked Impersonation を有効にすることは非常に危険です。クライアントの認証情報が盗まれた場合、そのクライアントは、システム内の任意のユーザーになりすますことができます。
7.6.1. 交換のパーミッションの付与
audience
パラメーターを指定すると、呼び出し元のクライアントにはクライアントへの交換パーミッションが必要です。これを設定する方法については、この章の前半で説明しています。
さらに、呼び出し元のクライアントには、ユーザーになりすますためのアクセス許可を付与する必要があります。管理コンソールにおいて
手順
- メニューの Users をクリックします。
Permissions タブをクリックします。
ユーザー権限
Permissions Enabled を true に切り替えます。
ID プロバイダーパーミッション
ページには、impersonation のリンクが表示されます。
そのリンクをクリックして、パーミッションの定義を開始します。
このセットアップページが表示されます。
ユーザーのなりすましパーミッションの設定
- Authorization のリンクをクリックします。
Policies タブに移動し、クライアントポリシーを作成します。
クライアントポリシーの作成
- トークン交換を要求する認証されたクライアントである、開始クライアントを入力します。
ユーザーの impersonation パーミッションに戻り、定義したクライアントポリシーを追加します。
クライアントポリシーの適用
クライアントには、ユーザーの権限を借用できるパーミッションがあります。これを正しく行わないと、このタイプの交換を行おうとすると、403 Forbidden 応答が返されます。
パブリッククライアントは、ダイレクトの Naked Impersonation を行うことはできません。
7.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/auth/realms/myrealm/protocol/openid-connect/token
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/auth/realms/myrealm/protocol/openid-connect/token