Keycloak AttributeToRoleMapper с несколькими значениями - PullRequest
0 голосов
/ 31 октября 2018

В моем проекте есть поставщик удостоверений SAML с несколькими ролями, которые мы хотели бы сопоставить одной роли на нашем сервере Keycloak.

К сожалению, метод isAttributePresent предполагает, что только одна роль IdP сопоставлена ​​и проверена в ответе SAML.

Если вы создадите один сопоставитель для каждой роли IdP, сопоставленной с одной ролью, поток входа в систему завершится неудачно после второго входа в систему, поскольку сопоставления проверяются по одному, а если последний из оцениваемых не пройден, роль удаляется.

Mappers:

  • mapper1 - IdpRole1 -> KC_ROLE
  • mapper2 - IdpRole2 -> KC_ROLE

Пользователи:

  • user1 - имеет IdpRole1, IdpRole2
  • user2 - имеет IdpRole1
  • user3 - имеет IdpRole2

user1:

  • первый логин:

    • importNewUser вызывается для mapper1, KC_ROLE связан

    • importNewUser вызывается для mapper2, KC_ROLE связан

  • второй логин:
    • updateBrokeredUser вызывается для mapper1, KC_ROLE связан
    • updateBrokeredUser вызывается для mapper2, KC_ROLE связан

user2:

  • первый логин:
    • importNewUser вызывается для mapper1, KC_ROLE ассоциируется
    • importNewUser вызывается для mapper2, KC_ROLE ассоциируется
  • второй логин:
    • updateBrokeredUser вызывается для mapper1, KC_ROLE связан
    • updateBrokeredUser вызывается для mapper2, KC_ROLE удаляется

user3:

  • первый логин:
    • importNewUser вызывается для mapper1, KC_ROLE связан
    • importNewUser вызывается для mapper2, KC_ROLE связан
  • второй логин:
    • updateBrokeredUser вызывается для mapper1, KC_ROLE удаляется
    • updateBrokeredUser вызывается для mapper2, KC_ROLE связан

Следовательно, user1 и user 3 будут иметь роль, а user2 - нет.

Есть ли обходные пути к этому? Есть ли план поддержки нескольких значений?

1 Ответ

0 голосов
/ 08 марта 2019

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

Кроме того, вы можете выбрать собственный картограф, который может иметь несколько значений (но это тема расширения / интеграции).

Другой возможный обходной путь - выполнить сопоставление и объединить атрибуты на промежуточном / внешнем уровне IdP SAML, который используется для федерации провайдера идентификации, так что экземпляр Keycloak получает только один атрибут для сопоставления с ролью области в keycloak.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...