В моем проекте есть поставщик удостоверений 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 - нет.
Есть ли обходные пути к этому? Есть ли план поддержки нескольких значений?