Pull to refresh

Comments 28

Очень интересная тема, надеюсь, будут и примеры кода
А не было случайно проблемы, когда Кейклок держал кучу соединений в time_wait, как будто чего-то ждет от балансировщиков?
Нет такая проблема не возникала, т.к при первичной настройке мы использовали кластеризацию настроек и выделяли опытным путем подобранное количество ядер и памяти, а так же ряд других настроек оптимизированных для нашей инфраструктуры.
Мы используем два разных решения для балансировки нагрузки — для внутренних пользователей(локальная сеть) и внешних (доступ из публичных сетей). Это специализированные решения.
Возможно стоит более детально изучить проблемы на предмет тюнинга сетевого стека при использовании haproxy или иных.

Я планирую затронуть эти вопросы во второй части статьи, где будут технические детали развертывания кластера.
Есть множество вариантов почему возникает подобная проблема и основное влияние оказывает инфраструктура, в которой развернуто решение — контейнеры или ВМ и версии софта.

Спасибо за вводную, действительно, хотелось бы побольше информации по реализации, так как инструмент выглядит перегруженным и геморройным в эксплуатации. У такого рода ПО, как правило, гора тонкостей и нюансов, толком не описанных в документации и решаемых разным количеством костылей и матюков. Хотелось бы почитать.


PS. Слышал, что у X5 высокая доля внедрения IPv6 в интранете, интересно было бы почитать.

Используем в комбинации с KrakenD неплохо, но ошибки неудобно смотреть.

Keycloak — достаточно мощная система, но и достаточно "интересная" в плане интеграции, начиная с отсутствия библиотек под некоторые распространённые языки. А rest api позволяет не всё, например создавая scope'ы, он вам не отдаст их scope_id, и наоборот, получая scope_id, вы не получите название scope'а. Или я просто плохо искал?


Через что в итоге вы внедряли, у вас композитный доступ по ресурсам или обычный по группам?

Хм, апи довольно мощный, про scope не смотрел, но по client дёргаю через апи всё, что нам нужно.
Клиентами управляю так же через апи (точнее, через ансибл модуль).
Все так, каждый выбираем сам, что ему требуется на основе имеющегося стека технологий
Мы стараемся использовать рекомендованные и опробованные библиотеки. Однако сталкивались с рядом трудностей на Angular. Часть кейсов мы решаем самостоятельно или используем преимущества поддержки вендора.
По поводу scope и scope_id возможно стоит сделать два запроса (но это решение прямое и в лоб – без погружения в задачу)
У нас используются различные вариации, а так же в ряде случаев для машинного взаимодействия

По моему опыту, использование собственных библиотек KC только усложняет жизнь.
Я предпочитаю брать любую другую реализацию OIDC/OAuth2 c поддержкой JWKS. Ну и в конце концов, библиотек по работе с JWT более чем достаточно на любой вкус, а написать специфичный для веб-фреймворка middleware, распаковывающий и валидирующий токены — не запредельно сложно.


API у него и вправду довольно жуткий. Меня убило уже то, что из него нельзя получить названия ролей пользователя по id пользователя в один запрос.

Мы сейчас тестируем вариант с использованием gatekeeper. Вообще ничего в коде можно не менять.

Мне настолько не нравится сам KC, что я избегаю решений, которые могут нас к нему сколько-то привязать.


Тем не менее, для низкого старта нет ничего лучше.

А чем именно не нравится? Альтернатив, на самом деле, достаточно. Auth0, допустим (у них, кстати, куча отличной документации по oidc и oauth2).

JBoss внутри мне не нравится. У меня абсолютно субъективная непереносимость Java EE и application servers.


Как только в плагине KC нужна интеграция с внешней системой чуть теснее HTTP API — начинается Java EE с ее маловменяемой конфигурацией датасорсов и очередей в XML.

По моим субьективным ощущениям Кийклоак многовато делает. Ведь редко все это нужно в комбинации.
Какие альтернативы этому продукту существуют? Мозехт кто-то посоветует?
Самая интересная мне фича это раздача OAuth2 токенов (в JWT формате). База пользователей есть уже, к ней надо привязать.

Вы можете брать только тот фукнционал, который вам нужен. Можно просто выдавать токены и всё. Мы, например, целиком отказались от политик и ролей кейклока. Просто добавляем в токен членство в АД группах и по ним делаем авторизацию в приложении уже.
Несомненно, каждый проект или продукт в праве выбирать, что ему необходимо и требуется. Очень распространённый кейс, когда keycloak используется в связке с AD или ADFS и сервисом дообогащения данных из других ИС
Одна из ярких альтернатив при использовании API-GW — связка Gravitee APIM + Gravitee Access Management. В целом можно сказать это комплексное решение.
Так же возможна связка APIGEE + Keycloak — для высоконагруженных проектов, где есть монетизация.
Опять же каждый решает сам по применимости к своему стеку и всегда есть альтернатива 
База пользователей есть уже

тут два варианта навскидку


  • написать user storage provider для KC(довольно несложно пишутся, но IMO неудобно отлаживать)
  • взять опенсорсный OIDC или OAuth2 провайдер по вкусу и поменять источник пользователей в нем
взять опенсорсный OIDC или OAuth2 провайдер по вкусу

Так вот какие советуете то?

Честно говоря — я пока не присматривался всерьез, мы пока плагинами в KC обходимся.


Из того, что попадалось на глаза и вызывало некоторый интерес
https://github.com/cloudfoundry/uaa
https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server
https://github.com/mbuczko/cerber-oauth2-provider


На офсайте OIDC есть целый список реализаций, смотреть те, в которых есть identity provider.
https://openid.net/developers/uncertified/

Выглядит все как-то слабо на фоне КС. Хм… видимо КС это немного старый принцип. Все в одном флаконе…
Интересным показался вот этот подход. Отдельбые тулы выполняющие свои задачи. https://www.ory.sh/docs/ecosystem/projects


Смотрю на них теперь. Так же на КС и амазоновский Cognito.
И наверно нам, как новичкам в этой теме, неплохо все иметь из коробки как у КС.

Да, на ORY Hydra я тоже поглядывал, он выглядит как минимум занятно.


Но все же для низкого старта, когда нужен полноценный OAuth2/OIDC, лучше KC по-моему ничего нет. Интегрировать его в систему несложно, гибкость настройки более чем достаточная, работает достаточно прилично. За пару лет не припоминаю сбоев, когда проблема была в самом KC.

А RHSSO кто-нибудь вообще пользуется?
Там есть какие-то отличия от Keycloak?
Или это просто некая стабильная и поддерживаемая версия?
Вижу, что последний RHSSO использует keycloak 4.x под капотом, хотя недавно вышел уже 8.0.2
Sign up to leave a comment.