Комментарии 19
При изменении политики доступа (добавить роли доступ к эндпойнту) придется менять код. Для этих целей на эндпойнту навешиваются ресурсы. Ресурсы также привязываются к роли. В этом случае достаточно добавить/удалить ресурс в роли для изменения политики доступа.
Но здесь у Кейклоака начинаются сложности. Связаны они с миграцией (необходимость переноса на новый сервер уже настроенной конфигурацией) раз. Со сложностью получения ресурсов из ролей на стороне бека (не проще ли использовать для этого собственное решение) два. И с использованием на фронте (официальная библиотека не поддерживает авторизацию).
Спасибо за ваш комментарий! Это действительно важные вопросы, которые возникают при использовании Keycloak в реальных условиях.
1. Миграция конфигурации: Да, перенос настроек Keycloak на новый сервер сложный процесс. Один из подходов к решению этой проблемы — использование инструментов для автоматизации миграции, таких как Keycloak Export/Import или Terraform для описания инфраструктуры в виде кода. К сожалению, я пока что с этим не сталкивался, поэтому никак не описывал данную проблему, да и данная статья больше подходит для начинающих, которые недавно узнали о keycloak.
2. Получение ресурсов из ролей на бэкенде: В некоторых случаях разработка кастомного решения может быть более эффективной, особенно если ваши требования отличаются от типичных сценариев использования Keycloak. Однако, при этом важно учитывать время и ресурсы, которые понадобятся на разработку и поддержку такого решения. В дальнейшем, я могу написать статью, где буду использовать кастомную реализацию!
3. Использование на фронте: Ограниченная поддержка Keycloak для авторизации на фронтенде может стать проблемой, особенно если вы используете технологии, которые официальная библиотека не поддерживает. В таких случаях можно рассмотреть использование сторонних библиотек или даже разработку собственного решения, которое будет интегрироваться с Keycloak через его API. Я не особо знаком с фронтом, поэтому также не стал затрагивать эту область!
Фронт нужен только лишь для того, чтобы обращаться к своему ресурс серверу с передачей RPT (requesting party token). Тут и появляется главное предназначение keycloak - UMA (user managed access). Использование Keycloak в качестве authorization server - это, по моему, больше вспомогательная роль. Т.к. наверняка на рынке есть куча подобных решений.
Вот именно этот механизм в новых версиях Кейклоака сломан. Чтобы фронт не палил secret сделана возможность аутентификации через публичного клиента. Полученный от публичного клиента токен фронт отправляет беку и бек идет обменивать его на приватный токен с ресурсами (в приватном клиенте) и получает ошибку.
Тут вступает в силу UMA. Вы с токеном с публичного клиента идете в бек, бек идет в keycloak с запросом ресурса, получает permission ticket и возвращает его на фронт. Фронт берет тикет и обменивает его на новый токен, уже RPT. И уже с этим RPT идет на бек.
Возможно вы имели в виду то же самое. Но тогда я не понимаю, чего там сломано. Прямо сейчас делаю эту процедуру в Keycloak 26.
После некоторого блока статей, я вернусь к этой теме и постараюсь также детально разобрать этот случай. Спасибо за ваш комментарий !!
Я уже все грабли сломал. То что вы описываете это для одного ресурса? То есть при каждом запросе бек идет за permission ticket?
У меня другая ситуация. Я пытаюсь обменять публичный токен на rpt со всеми ресурсами, чтобы каждый раз не ходить за токеном. И до 22 версии это работало, но потом перестало.
для меня тоже интересен вариант, когда ресурсов тысячи. Но, как я понял, ресурсы можно в токен дописывать. Допустим, штук 50, мне кажется, в токене будет ненапряжно таскать. В общем, прочитайте, тут найдете ответы на все вопросы https://www.keycloak.org/docs/latest/authorization_services/index.html. Пока я целиком не прочитал, рабочего варианта получить не мог.

Класс, уже не только стати но и ответы пишут с помощью чатгпт
не стоит полагаться на чатгпт в вопросе keycloak, многое приходится делать по-другому.
В самой статье данный ресурс никак не был задействован, все писалось самостоятельно на основе личного опыта. Ответ на комментарий действительно отчасти был сгенерирован при помощи гпт, но это было сделано из-за спешки, так как не хотелось оставлять пользователя без ответа. Больше таких ответов как можете заметить нет. Хотелось бы извиниться за такой неприятный случай!
Жаль что в основном статьи для новичков. Что-то посложнее уже почти никто не разбирает. Например всякие аутентификации с помощью физического токена, керберос, по сертификату или северная аутентификация по mTLS без кредов ну и тд и пт. Рассмотрение цепочек аутентификаций с несколькими факторами, в том числе с проверкой сети, подтверждение по смс, устройства, биометрия..
Спасибо за ваш комментарий!
Я с вами полностью согласен, в наших реалиях действительно больше статей для новичков, но многие технологии все равно разобраны не так детально, как это попытался сделать я. Когда я сам изучал Keycloak, я столкнулся с проблемой, что многие упускают важные детали, которых мне не хватало для полного понимания.
В дальнейшем я планирую делать более подробные статьи, которые касаются не только новичков, но и специалистов с опытом!
Все, что касается этой статьи, описано тут https://www.keycloak.org/docs/latest/authorization_services/index.html.
Лучше напишите какую-нибудь достаточно серьезную статью. С базовыми настройками любой разберется. Либо предложите какое-нибудь неочевидное решение. Или как вы решаете проблему доступа к конкретным ресурсам, допустим, их у вас тысячи. Таскаете ли вы их все в RPT или у вас там только последние N штук. А сколько N штук лучше всего хранить в токене?
Спасибо за ваш комментарий!
С тем, что тут описаны базовые настройки, я соглашусь, а точнее я прямым текстом в статье об этом пишу. Вы скинули ссылку на документацию по Keycloak, я ее просто упростил и показал все на примерах, чтобы начинающие специалисты быстрее разобрались с этой технологией. Я согласен с вами, что более серьезную статью тоже надо написать, но я бы хотел к этому подойти постепенно. Я хочу, чтобы мои статьи приносили пользу как для начинающих, так и для опытных специалистов, и чтобы каждая статья могла дополнить новую! Еще раз спасибо за ваш комментарий!
Не очень понял, для чего используется зависимость
<artifactId>keycloak-admin-client</artifactId>?
Судя по статье - зависимость не нужна.
все ответы на вопросы в комментах сгенерированы нейронкой, не хватает кармы минуснуть
Keycloak интеграция со Spring boot