Я пытаюсь реализовать пользовательский SPI Authenticator keycloack для целей аутентификации с использованием внешнего поставщика удостоверений.Пользователи уже существуют в хранилище ключей, мне нужно только подключение к пользовательскому SPI для их аутентификации.
Я следую разделу 8.3 официального руководства https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough,, которое очень похоже на то, что янеобходимость.
Проблема, с которой я сталкиваюсь, состоит в том, что после поток аутентификации запускается в методе "action" пользовательского Authenticator, исключение выдается из класса AuthenticationProcessor
, который послеосмотр исходит из следующей проверки:
// org.keycloak.authentication.AuthenticationProcessor - line 876
if (authenticationSession.getAuthenticatedUser() == null) {
throw new AuthenticationFlowException(AuthenticationFlowError.UNKNOWN_USER);
}
после того, как я увидел эту проблему, моей идеей попытаться решить ее, было получить пользователя (уже проверенного с внешним провайдером идентификации) из хранилища ключей и вставить его вAuthenticationSession, например:
// Connect against external Service Provider
// and asume "USER_ID" represents an already validated User
// AuthenticationFlowContext = afc is given as parameter
UserFederationManager ufm = afc.getSession().users(); // <-- PROBLEM
UserModel userFound = ufm.getUserById("USER_ID", afc.getRealm());
if (userFound != null) {
// get reference to the authSession
AuthenticationSessionModel asm = afc.getAuthenticationSession();
// set authenticated user on the session
asm.setAuthenticatedUser(userFound );
return true;
}
return false;
Проблема с приведенным выше кодом заключается в том, что Java NoSuchMethodExceptionError генерируется в отношении метода users()
класса org.keaycloak.models.KeycloackSession
.Например:
11: 26: 32,628 ОШИБКА [org.keycloak.services.error.KeycloakErrorHandler] (задание по умолчанию-14) Неподходящая ошибка сервера: java.lang.NoSuchMethodError: org.keycloak.models.KeycloakSession.users () Lorg / keycloak / models / UserFederationManager;
Любое предложение, которое вы могли бы сделать, чтобы помочь мне решить эту проблему, будет высоко оценено!