Я пытаюсь выдать токен доступа посредством олицетворения с помощью доверенного клиента и выдачи токена для клиента publi c. Я установил разрешения на обмен токенами, и запрос работает. Однако моя проблема в том, что выданный токен, похоже, содержит неправильного клиента в AZP.
Вот мой запрос:
curl -v -X POST \
-d "client_id=impersonator-client" \
-d "client_secret=<secret omitted>" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
-d "audience=target-client" \
--data-urlencode "requested_subject=john.doe" \
http://localhost:8080/auth/realms/swarm/protocol/openid-connect/token
В основном я хочу получить токен доступа для пользователя " john.doe », выдавая себя за пользователя с помощью« impersonator-client ». Выданный токен должен быть отчеканен для «target-client», однако AZP по-прежнему содержит «impersonator-client».
Причина, по которой я делаю это, заключается в том, что должна быть возможность входа с использованием внешнего рабочий процесс аутентификации, который, в конце концов, предоставляет токен доступа, который затем может быть проверен на моем внутреннем сервере, который использует доверенный клиент для олицетворения.
Согласно документации (https://www.keycloak.org/docs/latest/securing_apps/#_token -exchange ) аудитория должна определить целевого клиента, для которого предполагается создать токен.
По поводу разрешений:
Я установил разрешение «admin-impersonating.permission.users» с клиентской политикой, которая ссылается на «имперсонатор-клиент». Сам «целевой клиент» настроен с разрешением «token-exchange.permission.client.e236d39 c -9b9 c -4815-b734-90364fea4e91», которое включает в себя политику клиента, ссылающуюся на «имперсонатор-клиент». Я что-то упустил? Дело в том, что документы кажутся неправильными. В документах используется «user-impersonated.permission.users» вместо «admin-impersonating.permission.users». Когда я попробовал вот так, запрос был даже отклонен.
Это ошибка в Keycloak или я что-то сделал не так?
Заранее спасибо!