Как добавить политику в Keycloak - пользовательский интерфейс вылетает
Я пытаюсь включить поток, когда какой-то пользователь-администратор с помощью какого-либо клиента администратора может создавать пользователей и получать их токены доступа для использования другими клиентами.
Я имею установку KeyCloak с токена обмена и мелкозернистый AuthZ включен и настроен клиентов. Я могу войти в систему своего администратора с помощью REST api, а затем обменять токен. Но когда я указываю аудиторию, я получаю ошибку.
Этот возвращает токен, но мне нужен токен для другого клиента / аудитории.
http -f POST https://my-keycloak-server.com/auth/admin/realms/my-realm/protocol/openid-connect/token grant_type=urn:ietf:params:oauth:grant-type:token-exchange requested_subject=1a147915-53fe-454d-906a-186fecfa6974 client_id=api-admin client_secret=23a4ecbe-a9e8-448c-b36a-a45fa1082e6e subject_token=eyJhbGeiOiJSUzI1NiIs......
Этот выдает ошибку.
http -f POST https://my-keycloak-server.com/auth/admin/realms/my-realm/protocol/openid-connect/token grant_type=urn:ietf:params:oauth:grant-type:token-exchange requested_subject=1a147915-53fe-454d-906a-186fecfa6974 client_id=api-admin client_secret=23a4ecbe-a9e8-448c-b36a-a45fa1082e6e subject_token=eyJhbGeiOiJSUzI1NiIs...... audience=my-another-client
{
"error": "access_denied",
"error_description": "Client not allowed to exchange"
}
Поэтому я попытался настроить мелкозернистую аутентификацию для клиента целевой аудитории (включил его на вкладке, затем попытался добавить политику для моего пользователя-администратора, чтобы иметь возможность обменивать токен), но когда я хочу добавить политику, которая позволит моему пользователю-администратору выполнять токен обмен Я застрял из-за ошибки пользовательского интерфейса.
При вводе имени политики я получил 404, когда Keycloak ищет коллизии имен. Afaik 404 в этом случае не должен блокировать публикацию формы, потому что это не конфликт имен. Вместо этого меня мгновенно перенаправили с ошибкой.
https://my-keycloak-server.com/auth/admin/realms/my-realm/clients/1bafa9a4-f7e2-422c-9188-58ea95db32ef/authz/resource-server/policy/search?name=some-name
В конце концов, я не могу добавить политику в Keycloak. Все время проверка формы заканчивается сбоем, вызванным тем, что имя политики 404 не найдено.
Я использую dockerized keycloak 10.0.0
Есть идеи?
1 ответ
Я взломал его, редактируя в реальном времени функцию скрипта Angular JS UI, которая выполняет проверку в строке 2403.
this.checkNameAvailability = function (onSuccess) {
if (!$scope.policy.name || $scope.policy.name.trim().length == 0) {
return;
}
ResourceServerPolicy.search({
realm: $route.current.params.realm,
client: client.id,
name: $scope.policy.name
}, function(data) {
if (data && data.id && data.id != $scope.policy.id) {
Notifications.error("Name already in use by another policy or permission, please choose another one.");
} else {
onSuccess();
}
});
}
к
this.checkNameAvailability = function (onSuccess) {
onSuccess();
}
И это в итоге приводит к успешной добавленной политике. По-прежнему похоже, что это ошибка пользовательского интерфейса.