Изменение роли пользователя в ключе после обновления в существующей базе данных - PullRequest
0 голосов
/ 13 апреля 2020

Я реализовал SPI хранилища данных, чтобы использовать Keycloak с существующей пользовательской БД, но столкнулся с этой проблемой: при обновлении ролей в моей БД роли в Keycloak не обновляются, и все мои попытки исправить это, например, приводят к ошибкам. я пытаюсь отключить кэш для федерации пользователей, ошибка после отключения кеша:

21: 37: 46,556 ОШИБКА [org.keycloak.services.error.KeycloakErrorHandler] (задание по умолчанию-3) Uncaught ошибка сервера: java .lang.NullPointerException в org.keycloak. keycloak-server-spi-private@9.0.2//org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute (KeycloakModelUtils. java: 415) в org.keycloak. keycloak-services@9.0.2//org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim (UserAttributeMapper. java: 101) в org.keycloak. keycloak-services@9.0.2//org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim (AbstractOIDCProtocolMapper. java: 119) в org.keycloak. keycloak-services@9.0.2//org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.transformAccessToken (AbstractOIDCProtocolMapper. java: 81) в org.keycloak. keycloak-services@9.0.2//org.keycloak.protocol.oidc.TokenManager.transformAccessToken (TokenManager. java: 556) в org.keycloak. keycloak-services@9.0.2//org.keycloak.protocol.oidc.TokenManager.createClientAccessToken (TokenManager. java: 415)

Я нашел обходной путь для решения этой проблемы - переопределил метод getAttribute из интерфейса UserModel: обходной путь и получил это ошибка:

21: 42: 05,659 ОШИБКА [org.hibernate.engine.jdb c .spi.SqlExceptionHelper] (задание по умолчанию-3) Нарушение уникального индекса или первичного ключа: "PRIMARY_KEY_41 ON PUBLI C .FED_USER_ROLE_MAPPING (ROLE_ID, USER_ID) ('3cc65575-ba9b-4248-8601-bf4a9413cb17', 'f: cbd0e1b7-c6ed-4bd2-a4eb-b47fd8201ca8: 1', 1) "; SQL оператор: вставить в значения FED_USER_ROLE_MAPPING (REALM_ID, STORAGE_PROVIDER_ID, ROLE_ID, USER_ID) (?,?,?,?) [23505-193] 21: 42: 05,661 ОШИБКА [org.keycloak.services.error.HeycloakEr () задание по умолчанию-3) Неполученная ошибка сервера: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор в org. hibernate@5.3.13.Final//org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl. java: 154) в org. hibernate@5.3.13.Final//org.hibernate.query.internal.AbstractProducedQuery.list (AbstractProducedQuery . java: 1515)

если я включаю кеш, то при первом запросе токена я получаю ту же ошибку, что и выше, а на всех последующих я получаю токен, но мои роли не совпадают с моими из БД. Что я могу с этим сделать? Спасибо.

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