#oauth-2.0 #keycloak #openid-connect #artifactory #jfrog
Вопрос:
У меня есть Artifactory, настроенный для разрешения единого входа через клиент OIDC в Keycloak. Keycloak взаимодействует с Active Directory в фоновом режиме. У меня также есть тот же Active Directory, настроенный в Artifactory. Я также настроил Keycloak для предоставления групп пользователей в userinfo
структуре.
Что я пытаюсь сделать, так это заставить пользователей OAuth автоматически добавляться в импортированные группы LDAP в Artifactory. Я не возражаю, если это делается через userinfo
структуру или через отдельный поиск LDAP при входе пользователя в систему. Однако я не могу понять, как этого добиться.
Я знаю, что Artifactory предоставляет вызываемый плагин synchronizeLdapGroups.groovy
, который, похоже, рекламирует выполнение того, что мне нужно, однако похоже, что плагин на самом деле не вступает в силу. То есть пользователи в конечном итоге не получают разрешений, которые предоставляло бы членство в группах LDAP.
Я попытался сам написать плагин, чтобы делать то, что мне нужно, но когда я вызываю API для добавления групп пользователю, плагин вылетает. На данный момент неясно, почему.
Похоже, что другие использовали функцию SCIM в Artifactory для чего-то похожего на это (в основном через SAML, а не OIDC), однако Keycloak не поддерживает SCIM из коробки, и плагин SCIM, который я пытался использовать, также не дал мне никаких результатов.
Кто-нибудь делал что-то подобное этому и имеет рабочее решение, которому я мог бы следовать?
Ответ №1:
Если вы хотите, чтобы все пользователи были в определенной группе, вы можете попробовать:
- На вкладке Безопасность — настройки единого входа OAuth — установите флажок «Автоматически создавать пользователей»
- В разделе Группы идентификации и доступа — выберите конкретную группу и установите флажок «Автоматически присоединять новых пользователей к группе»
Я предполагаю, что вы хотите автоматически синхронизировать ассоциацию групп пользователей между Keycloak и Artifactory. SCIM — это то, что вы ищете, но есть известная проблема, связанная с плагином Keycloak SCIM. Мы изучаем плагин SCIM для Keycloak (не можем зафиксировать исправление на определенной временной шкале, но это должно произойти где-то в этом квартале).
Если вам нужна только ассоциация в пользовательском интерфейсе, вы можете попробовать SAML с набором «Автоматически ассоциировать группы». Он не будет применять ассоциацию групп для вызовов APIKey / Token, но это будет работать для пользовательского интерфейса.
РЕДАКТИРОВАТЬ: после дальнейшего расследования github.com/Captain-P-Goldfish/scim-for-keycloak здесь это не имеет значения — это делает keycloak клиентом SCIM, а не сервером SCIM. В keycloak нет официальной поддержки SCIM, см. issues.redhat.com/browse/KEYCLOAK-2537 . и нет работающего плагина для keycloak, который превращал бы его в SCIM-сервер, который я мог бы найти (пробовал несколько, все сломаны). На данный момент Artifactory не может поддерживать SCIM с помощью Keycloak
Комментарии:
1. «Я предполагаю, что вы хотите автоматически синхронизировать ассоциацию групп пользователей между Keycloak и Artifactory». Это правильно.
2. У вас есть ссылка или что-то, объясняющее конкретную проблему с SCIM / Keycloak, на которую вы ссылались?
3. для этого есть внутренний билет JA-2488 (без общедоступного билета). Мы изучаем это: github.com/Captain-P-Goldfish/scim-for-keycloak
4. Какова природа известной ошибки?
5. Насколько мне известно, официальной документации нет. Я предложу создать один. В любом случае суть в том, что в keycloak создайте клиент saml, установите флажок «Подписывать утверждения», снимите флажок «Требуется подпись клиента», снимите флажок «принудительная привязка поста», снимите флажок «Выход из системы переднего канала», установите «Допустимый Uri перенаправления» как <ip>/ *, в настройках конечной точки SAML <ip> /ui/login для обоих URL-адресов выхода. В Artifactory установите login amp; logout для <keycloakip>/auth/realms/keyCloak/protocol/saml, а для сертификата SAML — выберите из настроек области keycloak> Ключи> Открытые ключи> Сертификат> RS256 (Use=SIG)